2013-04-05 5 views
0

У меня есть следующий запрос, который успешно получает мне данные я после ...Sub Количество запросов в MySQL

$query = @"SELECT table1.user_id, table1.col8, table2.col5, user_tokens.expiry 
FROM table1 
INNER JOIN table2 
ON table1.user_id=table2.user_id 
INNER JOIN user_tokens 
ON user_tokens.user_id=table1.user_id 
WHERE table1.col2 = '{$userName}'"; 

Я играл с ним, чтобы дать мне некоторые дополнительные данные без второго запрос. Данные, которые я хочу, представляют собой подсчет строк из другой таблицы - table10 (которая также содержит user_id в качестве столбца), где совпадают столбцы user_id.

Так что-то вроде ...

,

(SELECT COUNT(*) FROM table) as userDataCount 

, которая в настоящее время дает мне ряд рассчитывать для всей таблицы, а не только те строки, которые имеют такой же user_id как table1

I что внутренние соединения, которые я сделал, будут только считать строки таблицы10, где столбцы user_id соответствуют остальной части запроса, и различные способы, которые я пытался связать с таблицей 10, или использование дополнительного ГДЕ, чтобы сказать, что WHERE table10.user_id = table1.user_id терпят неудачу.

Есть ли простой способ сделать это, или мне нужны два отдельных запроса?

ответ

1
SELECT 
table1.user_id, 
table1.col8, 
table2.col5, 
user_tokens.expiry, 
(SELECT COUNT(*) 
    FROM table 
     WHERE table.user_id=table1.user_id) as uCount 
    FROM table1 
    INNER JOIN table2 
    ON table1.user_id=table2.user_id 
    INNER JOIN user_tokens 
    ON user_tokens.user_id=table1.user_id 
    WHERE table1.col2 = '{$userName}'"; 
+0

Спасибо, ребята !! (SELECT COUNT (*) FROM table WHERE table.user_id = table1.user_id), так как uCount сделал трюк !! – Shaun

+0

Gidday Evan. Я ищу кнопку, чтобы сделать это, но не могу ее увидеть. Как пометить его? – Shaun

3

Существует много возможных решений на этом, один, , который я проиллюстрировал, соединяется через подзапрос, который отдельно получает общее количество для каждой группы.

SELECT table1.user_id, 
     table1.col8, 
     table2.col5, 
     user_tokens.expiry, 
     COALESCE(b.totalDataCount, 0) userDataCount 
FROM table1 
     INNER JOIN table2 
      ON table1.user_id=table2.user_id 
     INNER JOIN user_tokens 
      ON user_tokens.user_id=table1.user_id 
     INNER JOIN 
     (
      SELECT user_ID, COUNT(*) totalDataCount 
      FROM table10 
      GROUP BY user_ID 
     ) b ON b.user_id = table1.user_id 
WHERE table1.col2 = '{$userName} 
Смежные вопросы