посчитать количество записей в одной таблице, соответствующие записи в другой?

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
Lutsk
Это не то.

сказал бы уже, ЧТО "не то" - что вывелась одна строка :)

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).