Как использовать подзапрос MySQL для подсчета количества строк во внешней таблице? - PullRequest
0 голосов
/ 11 мая 2010

У меня есть две таблицы, users и reports. У каждого пользователя нет ни одного, ни нескольких отчетов, связанных с ним, а таблица reports имеет поле user_id.

У меня следующий запрос, и мне нужно добавить в каждую строку счетчик количества отчетов, которые есть у пользователя:

SELECT *
FROM users
LIMIT 1, 10

Нужно ли использовать подзапрос, и если да, то как его эффективно использовать? Таблица reports содержит тысячи и тысячи строк.

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

Нет необходимости в подзапросе:

SELECT users.user_id, COUNT(reports.user_id) AS number_of_reports
FROM users
LEFT JOIN reports ON users.userid = reports.userid
GROUP BY users.user_id

Чтобы сделать запрос более эффективным, убедитесь, что в полях user_id в обеих таблицах есть индексы

comment followup: функция COUNT не считает нули, поэтому она будет возвращать 0 (как и ожидалось) для всех пользователей, у которых вообще нет отчетов (объединение вернет NULL для reports.user_id). Также добавил бит GROUP BY, забыл, что в первый раз.

0 голосов
/ 11 мая 2010
SELECT users.userid,
       SUM( IF( Reports.userid > 0, 1, 0 )) as TotRpts
   FROM 
       users LEFT JOIN reports
          ON users.userid = reports.userid;
   GROUP BY
       users.userid

вам может потребоваться изменить IF () на

  IF( Reports.UserID is null, 0, 1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...