2014-12-12 2 views
0

Я работаю над тхатной комнатой, и все сообщения хранятся в одной и той же таблице «сообщение». Что я хочу, это перечислить отдельных пользователей и отобразить новый порядок сообщений по новому сообщению.MYSQL - подсчет с условием

Вот мой MySql Таблица «сообщение»:

Пусть говорят я псевдо «ОЛИВЕР»!

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 + 

Результаты shouled отображения только записи, относящиеся к псевдо 'ОЛИВЕР' для Exemple:

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 (непрочитанные) сообщения являются ручки с полем лу и значение = "0"

# старых (READ) являются сообщениями ручки с полем л и значением = «1»

Моего фактический запрос подсчитывает все сообщения для всех отдельных пользователей, связанных с «ОЛИВЕРОМ», как я могу рассчитывать всю новую MESSA ges для всех отдельных пользователей?

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

Я думаю, что счет «Уильяма» должен быть 2. –

ответ

1

Исходя из логики вы описали, я думаю, что этот запрос делает то, что вы хотите:

SELECT destinataire, pseudo, SUM(lu = 0) AS cnt 
FROM message 
GROUP BY destinataire, pseudo 
ORDER BY pseudo, cnt DESC; 

Вы также можете добавить пункт where, чтобы ограничить результаты к одному destinataire.

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