0

私はテーブルを持っています

________________________________________________________________________________
|                         Message                                               |
|_______________________________________________________________________________|
| ID(INT) |  Text(TEXT) |read(TINYINT(0/1)) |deleted(TINYINT(0/1))|  User_id    |
| 1       | How Are You?|      0            |        0            |    6        |
| 2       | Fine        |      0            |        1            |    4        |
| 3       | Message 3   |      1            |        0            |    6        |
| 4       | Message 4   |      0            |        1            |    6        |
| 5       | Message 5   |      1            |        0            |    5        |
|_________|_____________|___________________|_____________________|_____________|

ここで、user_id = 6のメッセージを選択し、read=0とread=1の列数を個別に選択します。これはgroupbyコマンドで実行でき、iamは現在2つのSQLクエリで実行しています。誰かが参加する可能性があります。それらを1つに

select message,count(*) from message where User_id=6 and read=0 group by id;//for unread message
select message,count(*) from message where User_id=6 and read=1 group by id;//for read message
4

3 に答える 3

3

2つのクエリを結合するのは非常に簡単ですが、本当に必要なものが得られません。

SELECT `message`, count(*) AS `cnt` , `read`
FROM message 
WHERE `User_id`=6 
  AND `read` IN ( 0, 1 ) 
GROUP BY `id` , `read`;
于 2012-06-12T08:54:29.890 に答える
1

どうして?

select
  message,
  sum(read) as num_read,
  sum(case read when 0 then 1 else 0 end) as num_unread
from message
where user_id = 6
group by user_id

?実際のニーズとSQLの実装に応じて、whereまたはgroupby行のいずれかを削除できます。

于 2012-06-12T09:05:03.353 に答える
0

これを試して:

select read,id,count(*) 
  from message 
 where user_id = 6 and read in (0,1) group by read,id
于 2012-06-12T08:58:54.527 に答える