Задавайте вопросы, мы ответим
Вы не зашли.
собственно вот запрос в базу вдаваться не надо, проблема в том, что 2 count не правильно выполняются. убираешь один и всё правильно а вдвоём неправильно
SELECT
tuses.caption,
tuses.date,
clubs.name,
comics.image,
comics.id as comics_id,
ifnull(count(comments.id),0) AS comment,
ifnull(avg(rating.rate),0) AS rateval,
ifnull(count(rating.id),0) AS golosov
FROM clubs
INNER JOIN tuses ON tuses.id_club=clubs.id
INNER JOIN comics ON comics.id_tusa=tuses.id
LEFT JOIN comments ON comments.id_comics=comics.id
LEFT JOIN rating ON rating.id_comics=comics.id
GROUP BY clubs.name, tuses.caption, comics.image
order by rateval desc
Неактивен
Что-то не пойму, что значит "не правильно работает"
Приведите примеры выборки что-ль.
Неактивен
кратко:
clubs -(Один ко многим)>tuses -(Один ко многим)> comics
comics -(Один ко многим)> comments
comics -(Один ко многим)> rating
clubs поля (id, name )
tuses поля (id, id_club, name)
comics поля (id, id_tusa, caption )
comments поля (id, id_comics, name, text)
rating поля (id, id_comics, rate)
нужно одним запросом выбрать таблицу всех комиксов с полями:
к какой тусе он относится,
к какому клубу относится данная туса
+ количество коментариев относящихся к данному комиксу
+ среднеарифметический рейтинг
+ количество голосовавших
Исходный мой код запроса в первом моем посте. Помогите, моя не понимать.
Неактивен
А что значит «неправильно выполняется»? Примеры выборки приведите, пожалуйста
Наша тоже не понимать, что есть неправильного, синтаксис, вроде, нормальный
Неактивен
1 пример: в базе: 2 комментария и 2 голоса, а он выбирает 4 комментария и 4 голоса
2 пример: в базе 0 комментариев и 2 голоса, выборка 0 комментариев и 2 голоса
3 пример: в базе 2 коментария и 1 голос, выбирает 2 комментария и 2 голоса
незнаю в чем проблема
Неактивен
Я правильно понимаю, что проблема следующая?
1. Есть comics (c), у каждого из них может быть несколько comments (m) и несколько rating (r).
2. В случае, когда Вы делаете SELECT COUNT(m) FROM c JOIN m GROUP BY c, выдается правильно.
3. В случае, когда Вы делаете SELECT COUNT(r) FROM c JOIN r GROUP BY c, выдается правильно.
4. В случае, когда Вы делаете SELECT COUNT(m) FROM c JOIN m JOIN r GROUP BY c, выдается «неправильно».
Если так, то нужно понять лишь чем отличается случай 4 от случая 2: он отличается
добавлением лишнего JOIN, который в случае таблицы длиной более 1 строки дублирует
строки (для этого и JOIN), а Вы не группируете по образующимся дублям.
Попробуйте выбрать данные без сумм и группировок вообще, Вы поймете, о чем я говорю.
Соответственно, чтобы сделать правильные выборки, можно или пойти путём подзапросов,
или путем нескольких выборок. Думаю, подзапросы Вас устроят больше:
SELECT ..., (SELECT COUNT(m) FROM m WHERE c = x.c), ...
FROM comics x
Неактивен