distinct + count php

M
На сайте с 01.10.2014
Offline
61
760

Всем привет. Никак не могу разобраться в двух этих distinct и count. В общем, есть таблица с 5 столбцами id(id сообщения), poluchatel, otpravitel, text и data. Понятно, что в получателе и отправителе могут повторяться ники, если пользователи отправили больше одного сообщения друг другу. Так вот, мне нужно вывести на странице: пользователей, последнее сообщение(text) и дату этого сообщение, с которыми ведет диалог авторизированный пользователь. Пробовал так:

$dialogs = mysql_query("SELECT COUNT(DISTINCT otpravitel), otpravitel, text, date FROM messages WHERE poluchatel='$login' OR otpravitel='$login'",$db);
и потом пихал это в цикл, но выводилось только последнее сообщение, а не то что нужно. Помогите разобраться в этом. Спасибо
Лучшая вап клик пп для выкупа подписок (https://mcwap.ru/?r=1153)
siv1987
На сайте с 02.04.2009
Offline
427
#1

SELECT *, COUNT(*) as count FROM (SELECT * FROM messages WHERE poluchatel='$login' OR otpravitel='$login' ORDER BY id DESC) as m GROUP BY poluchatel

M
На сайте с 01.10.2014
Offline
61
#2
siv1987:
SELECT *, COUNT(*) as count FROM (SELECT * FROM messages WHERE poluchatel='$login' OR otpravitel='$login' ORDER BY id DESC) as m GROUP BY poluchatel

так он выводит и получателя и отправителя, то есть он считает их как бы не за один диалон. Например, может быть зарегистрировано 2 пользователя, но диалог будет между ними один, и вот нужно чтобы выводилось последнее сообщение из диалога между этими пользователями.

siv1987
На сайте с 02.04.2009
Offline
427
#3

Для этого вообщето создается message_map где хранится ид диалогов с кем ведет этот пользователь, либо хотябы ид диалога иметь в таблице по которому возможно их группировать. Иначе каким образом вы определите что это один и тот же диалог?

M
На сайте с 01.10.2014
Offline
61
#4

а как можно id диалога сделать? то есть, чтобы была проверка если появились новый ник либо в получателе, либо в отправителе, то id диалога увеличивался на один? я хотел сначала так сделать, но мне сказали, что можно как то через count, но видимо не до конца поняли.

siv1987
На сайте с 02.04.2009
Offline
427
#5

Представьте что диалог это та же тема на форуме. У темы есть свой ид, у сообщений свой. Когда пользователь создает новый диалог он открывает новую тему. Когда отвечает, он отвечает в теме. Вы вообще каким образом идентифицируете конкретный диалог между двумя пользователями?

M
На сайте с 01.10.2014
Offline
61
#6
siv1987:
Представьте что диалог это та же тема на форуме. У темы есть свой ид, у сообщений свой. Когда пользователь создает новый диалог он открывает новую тему. Когда отвечает, он отвечает в теме. Вы вообще каким образом идентифицируете конкретный диалог между двумя пользователями?

в том то и дело, что пока никак не идентифицирую) я принцип понял, но я не знаю как в mysql проверка полей делается, может подскажите примером

siv1987
На сайте с 02.04.2009
Offline
427
#7
mortido:
в том то и дело, что пока никак не идентифицирую)

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

M
На сайте с 01.10.2014
Offline
61
#8

В общем, создал таблицу диалогов, куда записывается два ника(которых еще не было) id и их последнее сообщение. Вроде бы работает. Забавно, что такое простое решение до меня пару дней доходило)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий