Вывод категорий и пунктов меню из разных таблиц БД

215
15 сентября 2017, 22:20

Здравствуйте. Поставлена задача, вытащить из ДБ некий список с категориями. Имеется 2 таблицы. Первая таблица (menu_categories) хранит категории: id и category_name. Вторая (menu_items) хранит пункты меню: id , номер категории для пункта (item_category) и item_name.

Задача вывести список, в котором по категориям разбиты пункты. То бишь идет первая категория и все пункты, которые относятся к ней, потом вторая и тд.

Сейчас имеется такой вот код. Проблема в том, что с выводом категорий проблем нет, а вот с выводом пунктов в эти категории и возникает вся морока.

    $categories_list = mysql_query("
        SELECT id, category_name 
        FROM menu_categories       
    ");
    // получаем все записи из таблицы menu_categories
    while($category = mysql_fetch_array($categories_list))
    {
        echo '<li>'.$category["category_name"].'</li>';
        echo '<ul>';
        // получаем все записи из таблицы menu_item, которые соответствуют категории данного цикла
        $item_list = mysql_query(sprintf("
            SELECT item_name, item_category
            FROM menu_items
            WHERE EXISTS (
                SELECT id
                FROM menu_categories 
                WHERE menu_items.item_category = menu_categories.%s
            )
        ", $category["id"]
        ));
        while($item = mysql_fetch_array($item_list))
        {
            echo '<li>'.$item["item_name"].'</li>';
        };
        echo '</ul>';
    };
Answer 1

Запрос:

Select c.id, c.category_name, i.item_name
From menu_categories c
Left join menu_items i on i.item_category = c.id
Order by c.id

Алгоритм примерно такой:

$full_list = mysql_query("
    Select c.id, c.category_name, i.item_name
    From menu_categories c
    Left join menu_items i on i.item_category = c.id
    Order by c.id     
");
$current_c_id = 0;
echo '<ul>';
while($entity = mysql_fetch_array($full_list))
{
    $c_id = $entity["id"];
    if($current_c_id != $c_id)
    {
        if(current_c_id != 0) echo '</ul>';
        echo '<li>'.$entity["category_name"].'</li>';
        echo '<ul>';
        $current_c_id = $c_id;
    }else
    {
        echo '<li>'.$entity["item_name"].'</li>';
    }
}
echo '</ul></ul>';
READ ALSO
Как написать правило для .htaccess?

Как написать правило для .htaccess?

ЗдравствуйтеЕсть папка reports, в ней есть файлы report-(номер отчета)

175
MySQL JSON пересортировка ключей объекта

MySQL JSON пересортировка ключей объекта

Как не допускать сортировку ключей объекта при записи в бд MySQL JSON? Есть много вещей где сохранение порядка ключей очень важноНапример другие...

315
Проблема с включением в скрипт шаблонов с одинаковыми функциями

Проблема с включением в скрипт шаблонов с одинаковыми функциями

Всем приветВсю голову сломал, помогите советом

270
1С с сайтом создать xml файл [требует правки]

1С с сайтом создать xml файл [требует правки]

Из 1с получается выгрузить данний на сайт но обратно не знаю как правильно создать xml файл,Заказы

261