Итак, я пишу довольно сложный запрос с полудюжиной объединений, зависимым подзапросом для целей [наибольший-на-группу], группировкой и т. Д. Это синтаксически допустимо, но я, по крайней мере, ясно сделал одна ошибка, потому что ничего не возвращает.
В прошлом я отлаживал действительные запросы, которые ничего не возвращали, удаляя объединения, выполняя подзапросы самостоятельно, удаляя условия WHERE и удаляя группировку, чтобы увидеть, что я получу, но пока этот вопрос меня озадачил. Есть ли лучшие инструменты или методы для такого рода вещей?
Этот конкретный запрос предназначен для MySQL, если он имеет значение для каких-либо специфичных для платформы инструментов.
Редактировать : надеялся на подсказки, не зависящие от запроса, но, поскольку вам нужен запрос для запуска EXPLAIN, и вам нужен вывод EXPLAIN, чтобы узнать, что это значит, я полагаю, должен добровольно ответить на вопрос, над которым я сейчас работаю;)
SELECT
artist.entry_id AS artist_id,
GROUP_CONCAT(tracks.title ORDER BY tracks.entry_date DESC SEPARATOR ',') AS recent_songs
FROM
exp_favorites AS fav JOIN
exp_weblog_titles AS artist ON fav.entry_id = artist.entry_id JOIN
exp_weblog_titles AS tracks ON tracks.entry_id =
(
SELECT
t.entry_id
FROM
exp_weblog_titles AS t JOIN
exp_relationships AS r1 ON r1.rel_parent_id = t.entry_id
WHERE
t.weblog_id = 3 AND
t.entry_date < UNIX_TIMESTAMP() AND
t.status = 'open' AND
r1.rel_child_id = artist.entry_id -- this line relates the subquery to the outside world
ORDER BY
t.entry_date DESC
LIMIT 3 -- I want 3 tracks per artist
)
WHERE
artist.weblog_id = 14 AND
fav.member_id = 1
GROUP BY
artist.entry_id
LIMIT 5
, приводящий к этому выводу EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY fav ALL 293485 Using where; Using temporary; Using filesort
1 PRIMARY artist eq_ref PRIMARY,weblog_id PRIMARY 4 db.fav.entry_id 1 Using where
1 PRIMARY tracks eq_ref PRIMARY PRIMARY 4 func 1 Using where
2 DEPENDENT SUBQUERY r1 ref rel_parent_id,rel_child_id rel_child_id 4 db.artist.entry_id 5 Using where; Using temporary; Using filesort
2 DEPENDENT SUBQUERY t eq_ref PRIMARY,weblog_id,status,entry_date PRIMARY 4 db.r1.rel_parent_id 1 Using where
Я сократил запрос до самого необходимого для этого вопроса ... в основном все, что мне нужно, это вернуть 3 трека на исполнителя.