Я хочу создать рекурсивное меню с включенными итогами продукта, однако я застрял сейчас, потому что я уже сделал Topmenu, однако я не могу найти другой способ сделать это.
Я не хочу использовать много MySQL Queries, потому что это может сделать мой сайт очень медленным.
Код, который я использую:
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);
Ожидаемый результат:
Dell (1)
--Computer(1)
---DataCable(1)
----Extra Sub (0)
Токовый выход:
Dell (0)
--Computer(0)
---DataCable(1)
----Extra Sub (0)