Итак, вот моя структура таблицы:PHP MySQL меню Сортировка
+--------------------------+ +----------------+ +-------------------------------+
| pages | | menus | | menu_pages |
+--------------------------+ +----+-----------+ +-------------------------------+
| id | title | slug | | id | name | | menu_id | page_id | parent_id |
+-------+---------+--------+ +----+-----------+ +---------+---------+-----------+
| 1 | Home | index | | 1 | default | | 1 | 1 | 0 |
+-------+---------+--------+ +----+-----------+ +---------+---------+-----------+
| 2 | About | about | | 2 | footer | | 1 | 2 | 0 |
+-------+---------+--------+ +----+-----------+ +---------+---------+-----------+
| 3 | Test 1 | test-1 | | 1 | 3 | 2 |
+-------+---------+--------+ +---------+---------+-----------+
| 4 | Test 2 | test-2 | | 1 | 4 | 2 |
+-------+---------+--------+ +---------+---------+-----------+
| 5 | Test 3 | test-3 | | 1 | 5 | 4 |
+-------+---------+--------+ +---------+---------+-----------+
Так в основном, у нас есть страницы, меню, а также menu_pages связывающие таблицы, которая указует меню, страницу, и родитель каждого меню пункт.
Вот мой запрос:
$query = "SELECT pages.id, pages.title, pages.slug, menu_pages.parent_id
FROM menus, pages, menu_pages WHERE menus.name = '$menu'
AND menus.id = menu_pages.menu_id
AND pages.id = menu_pages.page_id";
$results = $db->Query($query);
Вот вопрос: Как я могу получить элементы меню правильно вложены под их родителями в массиве? Я уже пробовал уже немало вещей, но никто из них не работал только на двух уровнях, поэтому я не буду суетиться с этим вопросом. Очевидно, мне нужна какая-то рекурсия в PHP или изменить мой запрос, возможно, таким образом, что я могу заставить SQL вернуть их правильно?
Это должно выглядеть примерно так на выходе:
[0] => array(
'id' => 1,
'title' => 'Home',
'slug' => '/',
'parent_id' => '0'
)
[1] => array(
'id' => 2,
'title' => 'About',
'slug' => 'about',
'parent_id' => 0,
'sub_menu' => array(
[0] => array(
'id' => 3,
'title' => 'Test 1',
'slug' => 'test-1',
'parent_id' => 2
)
[1] => array(
'id' => 4,
'title' => 'Test 2',
'slug' => 'test-2',
'parent_id' => '2',
'sub_menu' => array(
[0] => array(
'id' => 5,
'title' => 'Test 3',
'slug' => 'test-3',
'parent_id' => 4
)
)
)
)
)
Спасибо за помощь!
Благодаря Роб! С нетерпением ждем вашего решения - эта проблема заставила меня смутить какое-то время! –
Обновлено, чтобы включить окончательное решение - я думаю, вы можете пинать себя! –
О, боже мой, Роб, я думаю, что это сработает! Лучше, чем рекурсия, так как я предполагаю, что это быстрее. Я собираюсь реализовать это прямо сейчас, и если вы его получите, я соглашусь! :) –