Показать сообщение отдельно
  #3 (permalink)  
Старый 12.07.2017, 10:53
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

насколько я знаю, нельзя просто взять все "ON" для каждого джойна, и свалить их в одну кучу в конце. Они тогда будут относиться только к последнему джойну. В первом запросе это прокатило, потому что там INNER JOIN, связи один к одному, ссылочная целостность и прочее, т.е. на каждую строку из questions нашлось по одной строке из других таблиц. А с комментами всё по другому.
Кстати, непонятно, зачем GROUP BY в первом запросе.

попробуй так:

SELECT
questions.id,
questions.question_name,
questions.answer,
questions.variant1,
questions.variant2,
questions.variant3,
questions.variant4,
questions.user_id,
questions.city_id,
questions.street_id,
questions.date,
questions.img,
users.login,
city.city_name,
street.street_name,
COUNT(comments.questions_id) as countComment

FROM questions
INNER JOIN users ON questions.user_id = users.id
INNER JOIN city ON questions.city_id = city.id
INNER JOIN street ON questions.street_id = street.id
LEFT JOIN comments ON comments.questions_id = questions.id

GROUP BY questions.id ORDER BY `date` DESC

-------------------------------------------------------------

либо такой вариант (надо посмотреть, что быстрее):

SELECT
questions.id,
questions.question_name,
questions.answer,
questions.variant1,
questions.variant2,
questions.variant3,
questions.variant4,
questions.user_id,
questions.city_id,
questions.street_id,
questions.date,
questions.img,
users.login,
city.city_name,
street.street_name,
comments.countComment

FROM questions
INNER JOIN users ON questions.user_id = users.id
INNER JOIN city ON questions.city_id = city.id
INNER JOIN street ON questions.street_id = street.id
LEFT JOIN (
select id, count(*) as countComment
from comments GROUP BY questions_id
) comments ON comments.questions_id = questions.id

ORDER BY questions.date DESC
Ответить с цитированием