La manera más fácil es, probablemente, extraer la lista de categorías, recorrer y extraer sus productos adjuntos. (Ie varias consultas.)
Por ejemplo (pseudocódigo):
$result = fetch_assoc("SELECT category_id FROM categories");
foreach($result as $row)
{
echo $row['category_id'];
$result2 = fetch_assoc("SELECT product_id FROM products");
foreach($result2 as $row2)
{
echo $row2['product_id'];
}
}
Si desea hacerlo todo en una sola consulta se puede hacer algo como:
$result = fetch_assoc("SELECT product_id, category_id FROM products p JOIN categories c ON p.category_id = c.category_id ORDER BY c.category_id ASC");
$last = null;
foreach($result as $row)
{
# Output the category whenever it changes
if($row['category_id'] != last)
{
echo $row['category_id'];
$last = $row['category_id'];
}
echo $row['item_id'];
}
Entonces se puede repetir sobre el conjunto de resultados y extraiga el nombre de la categoría cada vez que cambie.
Puede haber una manera más sofisticada y elegante de escribir el SQL para hacer todo antes de obtenerlo de la base de datos, pero no soy tan inteligente. ;)
Nota: Los ejemplos usan pseudocódigo. Yo uso una clase de abstracción mysql que funciona como:
$db->query("SELECT stuff");
$db->multi_result(); // returns 2d-associative array
que pueda entonces foreach($db->multi_result() as $row)
, lo que es muy perezoso y impresionante.
Si lo desea, puedo publicar el código de la capa de abstracción.
Publique la consulta que está utilizando para que alguien pueda proporcionar el PHP para extraer los datos. –
No tengo ninguna consulta, mi pregunta es qué consulta usar. La publicación incluye la configuración de mi base de datos (los datos contenidos) y cómo quiero que se muestre, ¿qué más debo incluir? – sam