2016-05-14 4 views
1

私はフィールドを持つ行をカウントするstatusです等しい1だけのための1つのサブクエリUNION前:UNIONを使用してフィールドを値で合計する方法は?

... UNION SELECT receiver, login, sex, avatar, status, idMessage 
FROM messages 
LEFT JOIN users 
ON users.idUser = messages.receiver 
WHERE sender = 1 
GROUP BY receiver, sender 

SELECT sender, login, sex, avatar, status, 
    SUM(case when status = 1 AND receiver = 1 then 1 else 0 end) AS unread_messages 
FROM messages 
LEFT JOIN users 
ON users.idUser = messages.sender 
WHERE receiver = 1 

それが正しい動作しますが、私は、最初のクエリのためUNIONを追加するときそれは数えることの結果を破った。 SELECTが同じフィールドを持っていない

case when (status = 1 and receiver = 1) 
+0

をあなたが持っているものが正しいのですか?私はあなたがそれが間違っていると思う結果の 'idMessage'カラムのためかもしれないと思います。 –

+0

あなたは正しいと思われます – Gaga

答えて

-1

あなたの第一及び第二:だから、私は条件を追加しようとしたreceiver

のために、最初のクエリの行をカウントする必要があります。あなたは、両方のフィールドを追加する必要が

まず選択:

SELECT sender, login, sex, avatar, status, null idMessage 
     SUM(case when status = 1 AND receiver = 1 
       then 1 else 0 end) AS unread_messages 

第二選択:

SELECT receiver, login, sex, avatar, status, idMessage, null unread_messages 
+0

私は同じ数のフィールドを持っています。もう一度質問をしてください – Gaga

+0

しかし、結果セットに間違った値を持つように、あなたはunread_messagesでidMessageの和集合を作成しました – ebahi

関連する問題