The problem comes here in the query and the loop when displaying the records. Fichamaterial creates the autonomous PK and in the others I pick it up from it. Depending on the category of the material I show a dropdown or another with data from another table which have the same id. The loop goes through all the tables and creates all the records. What should I do in the consultation?
<?php
include("Conexion.php");
//creamos la consulta
$sql="SELECT f.*,
/*En el caso de cada categoria renombramos su campo para que todos salgan bajo un mismo nombre en este caso (m1)*/
CASE
WHEN(f.categoria='ordenador') THEN o.placa
WHEN(f.categoria='monitor') THEN m.tipom
WHEN(f.categoria='impresora') THEN i.tipoi
END as m1,
/*Aplica lo mismo que el anterior para (m2)*/
CASE
WHEN(f.categoria='ordenador') THEN o.procesador
WHEN(f.categoria='monitor') THEN m.tamano
WHEN(f.categoria='impresora') THEN i.consumible
END as m2,
/*En el caso de monitores e impresoras no tienen los otros campos, asi que devolvemos una cadena vacia y en el caso del ordenado el campo de la ram*/
CASE
WHEN(f.categoria='ordenador') THEN o.ram
WHEN(f.categoria='monitor') THEN ''
WHEN(f.categoria='impresora') THEN ''
END as m3,
/*Aplica lo mismo del caso anterior ahora devolvemos el campo de disco*/
CASE
WHEN(f.categoria='ordenador') THEN o.disco
WHEN(f.categoria='monitor') THEN ''
WHEN(f.categoria='impresora') THEN ''
END as m4,
/*Añado*/
CASE
WHEN(f.categoria='ordenador') THEN o.tarjetas
WHEN(f.categoria='monitor') THEN ''
WHEN(f.categoria='impresora') THEN ''
END as m5,
CASE
WHEN(f.categoria='ordenador') THEN o.ip
WHEN(f.categoria='monitor') THEN ''
WHEN(f.categoria='impresora') THEN ''
END as m6,
CASE
WHEN(f.categoria='ordenador') THEN o.dominio
WHEN(f.categoria='monitor') THEN ''
WHEN(f.categoria='impresora') THEN ''
END as m7,
CASE
WHEN(f.categoria='ordenador') THEN o.software
WHEN(f.categoria='monitor') THEN ''
WHEN(f.categoria='impresora') THEN ''
END as m8
FROM
fichamaterial AS f
/*La sentencia LEF OUTER JOIN Busca el registro, si lo encuentra lo devuelve y si no toma valor vacio, en este caso condicionamos el JOIN de la siguiente forma
1- Si la categoria del equipo es ordenador, entonces el JOIN sera entre fichamaterial y ordenadores, en caso negativo se devuelve NULL esto signifca que no hará join
2- Si la categoria del equipo es monitor, entonces el JOIN sera entre fichamaterial y monitores, en caso negativo se devuelve NULL esto signifca que no hará join
3- Si la categoria del equipo es impresora, entonces el JOIN sera entre fichamaterial e impresoras, en caso negativo se devuelve NULL esto signifca que no hará join
*/
LEFT OUTER JOIN ordenadores AS o ON f.idreferencia=(CASE WHEN f.categoria='ordenador' THEN o.idreferencia ELSE NULL END)
LEFT OUTER JOIN monitores AS m ON f.idreferencia=(CASE WHEN f.categoria='monitor' THEN m.idreferencia ELSE NULL END)
LEFT OUTER JOIN impresoras AS i ON f.idreferencia=(CASE WHEN f.categoria='impresora' THEN i.idreferencia ELSE NULL END);";
//ejecutamos la consulta
$registros=mysqli_query($conexion,$sql);
//leemos el contenido de $registros
while ($linea=mysqli_fetch_array($registros))
{
$elemento='td'.$linea['categoria'].$linea['idreferencia'];
echo "<tr>
<td>$linea[idreferencia]<br><input type='button' value='Ver' onclick='show($elemento.id)'></td>
<td>$linea[aparato]</td>
<td>$linea[categoria]</td>
<td>$linea[proveedor]</td>
<td>$linea[marca]</td>
<td>$linea[modelo]</td>
<td>$linea[nserie]</td>
<td>$linea[fechaentrada]</td>
<td>$linea[cantidad]</td>
<td>$linea[autorizadapor]</td>
<td>$linea[garantia]</td>
<td>$linea[ubicacion]</td>
<td>$linea[ninterno]</td>
<td>$linea[fechabaja]</td>
<td>$linea[observaciones]</td>
</tr>";
if ($linea['categoria']=='ordenador') {
echo "<tr id='tdordenador$linea[idreferencia]' style='display: none;'>
<td>$linea[idreferencia]<br>Specs:</td>
<td>Placa:<br>$linea[m1]</td>
<td>Procesador:<br>$linea[m2]</td>
<td>Ram:<br>$linea[m3]</td>
<td>Disco:<br>$linea[m4]</td>
<td>Tarjetas:<br>$linea[m5]</td>
<td>Ip:<br>$linea[m6]</td>
<td>Dominio:<br>$linea[m7]</td>
<td>Software:<br>$linea[m8]</td>
</tr>";
}
if ($linea['categoria']=='monitor') {
echo "<tr id='tdmonitor$linea[idreferencia]' style='display: none;'>
<td>$linea[idreferencia]<br>Specs:</td>
<td>Tipo:<br>$linea[m1]</td>
<td>Tamaño:<br>$linea[m2]</td>
</tr>";
}
if ($linea['categoria']=='impresora') {
echo "<tr id='tdimpresora$linea[idreferencia]' style='display: none;'>
<td>$linea[idreferencia]<br>Specs:</td>
<td>Tipo:<br>$linea[m1]</td>
<td>Consumible:<br>$linea[m2]</td>
</tr>";
}
}
mysqli_close($conexion);
?>