2

私はこのMySQLクエリを持っていますが、かなり簡単に思えます:

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

ここでやりたいことは、読み取られていないすべての PM を単純にカウントすることです (「読み取り」列に「1」がありません)。ある場合、クエリは正常に機能しますが、その条件を満たす行がない場合は何も返しません。

私は解決策を探すために最後の時間を費やしましたが、それがこのように機能するのは本当に奇妙に思えます。「pms」をエコーし​​ながら「0」のみを出力する必要があります。

4

4 に答える 4

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;
于 2012-06-05T10:08:09.710 に答える
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
于 2012-06-05T09:52:11.143 に答える
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
于 2012-06-05T09:52:30.507 に答える
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 = 0ON条項に入る必要があります。

WHERE句は、ミスNULLから生じるすべての値を除外します。pm

于 2012-06-05T09:53:13.047 に答える