2012-06-05 6 views
2

у меня есть этот запрос MySQL, кажется, довольно легко:Количество MySQL возвращает 0, ничего не возвращает

SELECT users.nick, users.id, COUNT(pm.id) AS pms 
FROM users LEFT JOIN pm ON users.id = pm.touser 
WHERE users.id = :id AND pm.read = 0 
GROUP BY users.id 

То, что я хочу сделать здесь просто сосчитать все PMs, которые не читают (не «1» в «read» col). Если они есть, запрос работает нормально, но когда нет какой-либо строки, удовлетворяющей этому условию, он ничего не возвращает.

Я потратил последний час на поиск решения, но кажется странным, что он работает именно так. Он должен печатать только «0» при эхом «pms».

ответ

1

Просто:

SELECT users.nick, users.id, COUNT(pm.id) AS pms 
FROM users LEFT JOIN pm ON (users.id = pm.touser AND pm.read = 0) 
WHERE users.id = :id 
GROUP BY users.id; 
+0

Он работал, спасибо! –

0

Попробуйте

SELECT nick,id, COUNT(id) AS pms 
FROM users LEFT JOIN (Select touser as id from pm where read =0) as pms1 
WHERE id = :id GROUP BY id 
0

Попробуйте изменить порядок таблицы:

SELECT users.nick, users.id, COUNT(pm.id) AS pms 
FROM pm 
LEFT JOIN users 
ON users.id = pm.touser 
WHERE users.id = :id AND pm.read = 0 
GROUP BY users.id 
0
SELECT users.nick, users.id, COUNT(pm.id) AS pms 
FROM users 
LEFT JOIN 
     pm 
ON  (pm.touser, pm.read) = (users.id, 0) 
WHERE users.id = :id 
GROUP BY 
     users.id 

pm.read = 0 должен перейти к статье ON.

WHERE пункт отфильтровывает все NULL значения, полученные в результате ошибки pm.

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