我正在开发一个聊天室,所有消息都存储在同一个表“消息”中。 我想要的是列出不同的用户并按新消息显示新消息。
这是我的MYSQL表'消息':
假设我是伪'OLIVER'!
id | lu | view_date | pseudo | destinataire | message | date |
------+--------+-------------+----------+-----------------+------------+-------------+
7181 | 0 | 0 | OLIVER | WILLIAM | HELLO | 1418214808 +
7183 | 0 | 0 | WILLIAM | OLIVER | HELLO | 1418214808 +
7184 | 0 | 0 | OLIVER | WILLIAM | HELLO | 1418214808 +
7184 | 1 | 1418214808 | OLIVER | MIKE | HELLO | 1418214808 +
7101 | 1 | 1418214808 | MIKE | OLIVER | HELLO | 1418214808 +
7186 | 0 | 0 | SUPERMAN | BATMAN | HELLO | 1418214808 +
7187 | 0 | 0 | DONALD | MICKEY | HELLO | 1418214808 +
7188 | 0 | 0 | GREG | OLIVER | HELLO | 1418214808 +
7189 | 0 | 0 | GREG | WILLIAM | HELLO | 1418214808 +
7189 | 0 | 0 | FUNKY | OLIVER | HELLO | 1418214808 +
7189 | 1 | 1418214808 | BERNARD | OLIVER | HELLO | 1418214808 +
7189 | 1 | 1418214808 | OLIVER | BERNARD | HELLO | 1418214808 +
7188 | 0 | 0 | GREG | OLIVER | HELLO | 1418214808 +
结果显示仅显示与伪'OLIVER'相关的记录,例如:
pseudo | total new Messages
---------+-------------------+
GREG | 2 <-- 3 entry but only 2 new message lu field = 0
WILLIAM | 1 <-- 2 entry but only 1 new message lu field = 0
FUNKY | 1 <-- 1 entry lu field = 0
MIKE | 0 <-- 1 entry lu field = 0
BERNARD | 0 <-- 1 entry lu field = 0
#New(UNREAD)消息处理字段lu和值=“0”
#旧(READ)消息处理字段lu和值=“1”
我的实际查询计算与“OLIVER”相关的所有不同用户的所有邮件如何计算所有不同用户的所有新邮件?
SELECT data, SUM(cnt) AS cnt
FROM (
(
SELECT destinataire AS data, COUNT(id) AS cnt
FROM message
WHERE pseudo = '".$_SESSION['pseudo']."'
GROUP BY data
)
UNION ALL
(
SELECT pseudo AS data, COUNT(id) AS cnt
FROM message
WHERE destinataire = '".$_SESSION['pseudo']."'
GROUP BY data
)
) pd
GROUP BY data
ORDER BY cnt DESC
答案 0 :(得分:1)
根据您描述的逻辑,我认为此查询可以满足您的需求:
SELECT destinataire, pseudo, SUM(lu = 0) AS cnt
FROM message
GROUP BY destinataire, pseudo
ORDER BY pseudo, cnt DESC;
您还可以添加where
子句,将结果限制为单个destinataire
。