#mysql #sql #query-optimization
#mysql #sql #оптимизация запросов
Вопрос:
У меня есть запрос, в котором я выбираю животных на определенном уровне вместе с некоторой информацией об их видах…
SELECT animals.id, animals.name, species.name, species.exlevel
FROM `animals`
INNER JOIN species ON animals.spid = species.id
WHERE animal.level=1
Я пытаюсь добавить этот запрос, чтобы включить количество всех комментариев из таблицы комментариев, оставленных для каждого животного. Однако я не могу найти оптимальный способ сделать это. Следующее, очевидно, не работает, но это то, что я хочу сделать … без выполнения двух отдельных запросов.
SELECT animals.id, animals.name, species.name, species.exlevel, COUNT(comments.id)
FROM `animals`
INNER JOIN species ON animals.spid = species.id
INNER JOIN comments ON animals.id = comments.anid
WHERE animal.level =1
AND comments.type =2
Комментарии:
1. И что плохого в выполнении двух отдельных запросов?
2. Они не так эффективны… Потому что я перебираю mysql_fetch_array из текущего запроса, а затем выполняю запрос select для подсчета комментариев. Я хочу перейти только к одному запросу.
Ответ №1:
SELECT animals.id, animals.name, species.name, species.exlevel, COUNT(comments.id)
FROM `animals`
INNER JOIN species ON animals.spid = species.id
LEFT JOIN comments ON animals.id = comments.anid AND comments.type =2
WHERE animal.level =1
GROUP BY animals.id, animals.name, species.name, species.exlevel
Комментарии:
1. Спасибо. Это сработало… но я сгруппировал только animals.id поле.