un approccio diverso, molto migliorabile
Codice PHP:
// recupera le intestazioni della tabella finale
$qcol = "SELECT diametro FROM misure GROUP BY diametro";
$col = mysql_query($qcol) or die("$qcol error: " .mysql_error());
// le inserisce in un array
while($c = mysql_fetch_array($col)) {
$column[] = $c["diametro"];
}
// recupera i valori dalla tabella (tutti concatenati in un unico campo)
$qrow = "SELECT quantita, GROUP_CONCAT(diametro) as d_concat FROM misure GROUP BY quantita";
$row = mysql_query($qrow) or die("$qrow error: " .mysql_error());
// imposta la tabella e scrive le intestazioni delle colonne
echo '<table border="1">';
echo "<tr><td>ml</td><td>" . implode("</td><td>", $column) . "</td></tr>";
// scorre i risultati della seconda query
while($r = mysql_fetch_array($row)) {
// nuova riga con il valore nella prima colonna
echo "<tr>";
echo "<td>" . $r["quantita"] . "</td>";
// separa i valori del campo concatenato
$d = explode(",", $r["d_concat"]);
// scorre l'array delle intestazioni
foreach($column as $c_data) {
// controlla che il valore dell'intestazione sia nell'array generato nell'explode
if(in_array($c_data, $d)) {
// se lo trova, segna il campo
echo "<td> X </td>";
}
else {
// se non lo trova, lascia il campo vuoto
echo "<td> </td>";
}
}
// chiude la riga
echo "</tr>";
}
// chiude la tabella
echo "</table>";
il risultato è questo
ml |
16 |
22 |
25 |
30 |
33 |
5 |
X |
|
|
|
|
10 |
|
X |
X |
|
|
25 |
|
|
X |
X |
X |