Зачем LEFT JOIN если таблица та же?

D
На сайте с 28.06.2008
Offline
1008
330

Немного тупит один запрос, пытаюсь его анализировать

SELECT m.*, count(p.parent_id) as cnt FROM #__menu AS m LEFT JOIN #__menu AS p ON p.parent_id = m.id WHERE m.menutype='main-menu' AND m.published='1' GROUP BY m.id ORDER BY m.parent_id, m.lft

И мне кажется странным - зачем тут LEFT JOIN если таблица та же? Можно ли как то оптимизировать его?

Индексы есть на все поля.

M
На сайте с 04.12.2013
Offline
199
#1

Рекурсия. Пункты меню/подменю хранятся в одной таблице.

Хостинг FOZZY ( http://fozzy.com.ru ) / Выслушаю предложения на домены ( http://u75.ru/domains-for-sale ) / Домены и скрипт для коротких ссылок ( http://u75.ru/domains-for-shortcuts )
D
На сайте с 28.06.2008
Offline
1008
#2

published='1' можно выкинуть, все меню опубликованы, не понятно зачем - count(p.parent_id) as cnt

А так можно?

SELECT * FROM `#__menu` WHERE `menutype` = 'main-menu' GROUP BY `id` ORDER BY `parent_id`, `lft`
LEOnidUKG
На сайте с 25.11.2006
Offline
1608
#3

Выкидывай всё, если вывод не меняется визуально. Там же в джумле сделано всё универсально.

count сделан, чтобы выводить количество записей в каждой категории.

У тебя там всё равно уже от джумлы практически ничего не осталось :)

✅ Трастовых площадок под размещение статей и ссылок. Опыт 14 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Ускорение ваших сайтов (WP, Opencart и др.) + Настройка сервера ( https://searchengines.guru/ru/forum/997205 )
M
На сайте с 04.12.2013
Offline
199
#4

То кол-во пунктов подменю для каждого пункта меню. Пока вы не присоедините пункты подменю, у вас не будет их parent_id.

---------- Добавлено 13.01.2019 в 14:17 ----------

...при условии WHERE `menutype` = 'main-menu'.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий