посчитать количество записей в одной таблице, соответствующие записи в другой?
Lutsk
Дата: 03.01.2013 19:55:52
Вопрос такой. Есть таблица статей, и таблица с отзывы к ним. Как составить запрос, чтоб в цикле при выводе статьи выводилось количество этих отзывов?
Например, таблица "articles":
---------------------------------------------
id_article | title | text | date |
---------------------------------------------
таблица "reviews":
------------------------------------------------------
id_review | id_article | text | user |
------------------------------------------------------
Т.е. в цикле выводятся данные из "articles", а количество записей, соответствующих "id_article" таблицы "reviews" также в этом цикле нужно вывести.
Akina
Дата: 03.01.2013 21:46:52
SELECT a.id_article, COUNT(r.id_review)
FROM articles a
LEFT JOIN reviews r
ON a.id_article = r.id_article
Lutsk
Дата: 03.01.2013 22:23:10
Это не то. Мне хочется узнать, - есть ли возможность сделать запрос, в котором выводились бы все статьи + количество отзывов на каждую. Знания мои по базам данных посредственные, - но здается мне, что тут селект в селекте как-то должен быть. Другими словами, в одной строке в итоге должны оказаться id_article, title, text, date и еще одно временное название поля "count", например.
Если такое возможно, конечно.
qwerty112
Дата: 03.01.2013 22:44:59
сказал бы уже, ЧТО "не то" - что вывелась одна строка :)
group by, просто
Akina потерял ..
SELECT a.id_article, a.title, a.text, a.date, COUNT(r.id_review) as xz
FROM articles a
LEFT JOIN reviews r
ON a.id_article = r.id_article
group by a.id_article
Lutsk
Дата: 03.01.2013 22:45:34
P.S. Как на данном форуме, например, выводится количество ответов в теме?
Lutsk
Дата: 03.01.2013 23:00:35
qwerty112, спасибо, - самое оно!
Lutsk
Дата: 04.01.2013 00:42:30
Мне ещё подсказали вариант:
SELECT articles.*,
(SELECT COUNT(*) FROM reviews WHERE reviews.id_article=articles.id_article) AS amount
FROM articles
Добрый Э - Эх
Дата: 04.01.2013 08:48:44
| Lutsk |
|---|
| Мне ещё подсказали вариант: |
Это не самый лучший вариант. Коррелированный подзапрос труднее поддается трансформации оптимизатором и часто проигрывает по производительности JOIN-у с последующей группировкой. Проверь оба варианта, сравни статистику выполнения...
Lutsk
Дата: 04.01.2013 11:29:28
| Добрый Э - Эх |
|---|
| Проверь оба варианта, сравни статистику выполнения... |
Пока разницы не увидел. Что один, что другой запрос выполнился за 0.0017 сек.
Lutsk
Дата: 04.01.2013 11:50:44
А с WHERE и ORDER BY первый вариант даже значительно проиграл (0.0165 сек. против 0.0017).