Как подсчитать общее количество записей по «парам»?

Всем привет! У меня такой вопрос. Есть табличка, а в ней есть поля to_user, from_user.
Например имеются записи, первая- to_user = 1, from_user=5, и вторая запись, где to_user=5, а from_user=1. Тоесть два человека обменялись сообщениями. У меня так организована переписка пользователей. Вот и нужно вывести общее количество диалогов с пользователями. В случае выше мы выводим цифру 1, ибо у нас переписка только с одним человеком, а их будет много.. Не могу составить запрос.. Делаю так:
SELECT `m`.* FROM `messages` as m JOIN `users` as u ON (m.`to_user` = '{$user['id']}' AND m.`from_user` = u.`id`) OR (m.`from_user` ='{$user['id']}' AND m.`to_user` = u.`id`) GROUP BY m.id

Но это не то.. выдает 2 записи, и я не знаю, как сгрупировать..
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Taksist410
мне кажется вначале нужно сделать

SELECT минимум(to_user,from_user) a , максимум(to_user,from_user) b FROM messages

а дальше из этой таблицы сделать выборку различающихся строк как то так:

SELECT DISTINCT a, b .....
Ответ написан
Комментировать
elevenelven
@elevenelven
Php Dev @ Amadeus
Исходя из формулировки вопроса, как-то очень просто выходит. Цитирую вас:
Как подсчитать общее количество записей по «парам»?
Вы хотите выбрать сообщения, которые отослал полизователь или прислали пользователю
SELECT * FROM `messages` WHERE `to_user`={$user['id']} OR `from_user`={$user['id']}


Дальше вы говорите, что на самом деле выбрать желаете что-то другое.
Тоесть два человека обменялись сообщениями... выводим цифру 1
Я так понимаю, что вы хотите получить общее количество диалогов, а не записей(в таблице сообщений)?!
А потом я смотрю на ваш запрос и вижу, что вы ищете(пытаетесь искать) количество диалогов в котором данный пользователь участвует.

SELECT * FROM `messages` AS z1
WHERE z1.`from`={$user['id']} OR z1.`to`={$user['id']}
AND NOT EXISTS(
	SELECT id FROM `messages` as z2 WHERE z2.`to` = z1.`from` AND z2.`from` = z1.`to`
)
GROUP BY `from`,`to`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы