Неправильное количество строк с двумя внутренними объединениями, которые подсчитывают связанные записи

#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 поле.