2016-01-06 8 views
1

Я хочу подсчитать максимальное количество сообщений, которые один пользователь отправил и получил от другого пользователя. Я не понимаю, как это достичь.застрял в запросе mysql

Example for 3 messages exchanged: 
[1] John(1472) msg Jane 
    Jane msg John(1472) 
[2] John(1472) msg Jane 
    Jane msg John(1472) 
[3] John(1472) msg Jane 

ИЛИ

[1] John(1472) msg Jane 
    Jane msg John(1472) 
[2] John(1472) msg Jane 
    Jane msg John(1472) 
[3] John(1472) msg Jane 
    Jane msg John(1472) 

ИЛИ

[1] John(1472) msg Jane 
    John(1472) msg Jane 
    John(1472) msg Jane 
    Jane msg John(1472) 
[2] John(1472) msg Jane 
    John(1472) msg Jane 
    Jane msg John(1472) 
    Jane msg John(1472) 
[3] John(1472) msg Jane 
    Jane msg John(1472) 

Все выше примеров дадут 3 сообщения, которыми обмениваются между этими двумя пользователями. Моя структура таблицы такова: http://sqlfiddle.com/#!9/f84f17/1

Каждый раз, когда пользователь отправляет сообщение другому пользователю, мы вставляем две строки в таблицу почтовых ящиков с разными senderid, получателем, владельцем и папкой (входящие/отправленные).

+0

Почему вы используете такой сложный structure.Just есть 4 столбца, такие как senderId, receiverId, message, status Если статус будет представлять, будет ли сообщение успешно отправлено или получено пользователем. –

+0

Структура таблицы не создана мной. Это уже сделанный проект, и я должен создавать для него отчеты. :) Сайт использует osDate framework. – munjal

+0

Затем выполните запрос типа WHERE senderid = '1472' AND recipientid = '338' –

ответ

1

Чтобы выбрать наибольшее число сообщений, которыми обменивается между пользователем и любым другим пользователем, вы можете сгруппировать пэром, заказом по количеству, и выбрать первый результат:

SELECT count(*), if(owner=senderid, recipientid, senderid) as peer FROM mailbox 
WHERE owner = 1472 
GROUP BY 2 
ORDER BY 1 desc 
LIMIT 1 
+0

Спасибо за anser @alex. Но это не сработает для третьего примера – munjal

+0

Наверное, нет. Не могли бы вы объяснить, как вы группируете сообщения в третьем примере. В идеале, поместите некоторые данные образца в sqlfiddle. –