Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую пользователей этого форума. Возник вопрос. Пусть есть 2 таблицы:
Неактивен
Неактивен
К сожалению ничего не вышло:
Используя этот запрос
Неактивен
Да, со звездочкой погорячился
SELECT q.id, q.quote, COUNT(*) AS count
FROM quotes AS q LEFT JOIN comments AS c ON c.quote_id = q.id
GROUP BY q.id
Вот так будет выбирать даже записи без соответствий в комментариях.
Неактивен
Спасибо огромное за Вашу помощь. Код рабочий, но возвращает единицу даже в случае, если у цитаты нет комментария. Но c.quote_id возвращается только в случае, если хотя бы одна цитата есть, поэтому я сделал так:
Отредактированно KnKill (13.02.2011 23:59:20)
Неактивен
Тьфу ты, разумеется, возвращает единицу В левой таблице всегда же есть
строка, даже если в правой ничего нет. Надо считать явно — количество строк
в правой таблице. Давайте попробуем еще одну итерацию — COUNT(c.quote_id)
вместо COUNT(*)
Добавить можно, точно так же — левым объединением. И считать точно
так же — количество строк, которые есть в «правой» таблице.
Неактивен
Спасибо Вам большое. Всё отлично работает!
Неактивен
Появилась ещё одна проблемка. С JOIN'ами я более менее разобрался, но следующая задача поставила меня в тупик.
Есть запрос
Отредактированно KnKill (19.02.2011 18:49:12)
Неактивен
COUNT() возвращает количество строк, которое он находит в объединенных
таблицах. Т.е. если у Вас простой запрос
SELECT COUNT(*) FROM A JOIN B
и в таблице A 3 строки, а в B — 2, то COUNT() вернет 6 (очевидно). Когда
Вы пишете условие ON (или WHERE) — вы ограничиваете количество строк
B. Если Вы ограничиваете до одной строки — COUNT выводит «правильное»
количество строк из А. Если ограничение у Вас вывело более одной строки —
COUNT вернул строк больше.
Решение — не добавлять такие штуки в этот запрос
Если совсем хочется, и жить без этого не можете — сделайте подзапросом.
Неактивен