2010-05-11 1 views
0

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

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

SELECT * 
FROM users 
LIMIT 1, 10 

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

ответ

0
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) 
3

Там нет необходимости для подзапроса:

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 в обеих таблицах

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

+0

+1 и комментарий, чтобы убедиться, что это подхватывает пользователей с нулевыми отчетами. Может понадобиться заявление для представления «0», если сторона отчетов предлагает NULL? – Smandoli

+0

это было именно то, что мне нужно для чего-то подобного – bowlerae

 Смежные вопросы

  • Нет связанных вопросов^_^