Je veux créer un menu récursif avec les totaux du produit inclus, mais je suis coincé maintenant parce que j'ai déjà rendu le menu principal mais je ne trouve pas une autre façon de le faire.Menu récursif avec le nombre de produits
Je ne veux pas utiliser beaucoup de requêtes MySQL car cela peut rendre mon site très lent.
Le code que je utilise:
require 'db.php';
$result = mysql_query("SELECT COUNT(c.category_id) AS count, c. category_id, c.parent_id, cd.name, p.product_id FROM category c
LEFT JOIN category_description AS cd ON (cd.category_id=c.category_id)
LEFT JOIN product_to_category AS ptc ON (ptc.category_id=c.category_id)
LEFT JOIN product AS P ON (p.product_id=ptc.product_id)
GROUP BY c.category_id
ORDER BY c.parent_id,cd.name") or die (mysql_error());
$menuData = array('items' => array(), 'parents' => array());
while ($menuItem = mysql_fetch_assoc($result)) {
$menuData['items'][$menuItem['category_id']] = $menuItem;
$menuData['parents'][$menuItem['parent_id']][] = $menuItem['category_id'];
}
function buildMenu($parentId, $menuData) {
$html = '';
if (isset($menuData['parents'][$parentId]))
{
$html = '<ul>';
foreach ($menuData['parents'][$parentId] as $itemId) {
$iCount = ($menuData['items'][$itemId]['product_id'] != NULL) ? $menuData['items'][$itemId]['count'] : '0';
$html .= '<li>' . $menuData['items'][$itemId]['name'] . ' (' . $iCount . ') ';
$html .= buildMenu($itemId, $menuData);
$html .= '</li>';
}
$html .= '</ul>';
}
return $html;
}
echo buildMenu(0, $menuData);
Le résultat attendu:
Dell (1)
--Computer(1)
---DataCable(1)
----Extra Sub (0)
Sortie courant:
Dell (0)
--Computer(0)
---DataCable(1)
----Extra Sub (0)
Je reçois le compte pour chaque catégorie correcte, mais mon problème est qu'il rend le TopCat First, et descend à partir de là. Donc, quand je descends, je ne peux jamais obtenir le compte de la catégorie supérieure. Aurai-je besoin d'une autre fonction récursive qui compte tout d'abord? Ou quelle est la meilleure pratique pour ce problème? – DirkZz