Xwab
Форумыnavigate_nextНебольшие вопросы по PHP/MySQL

вывод сообщений в виде диалогов
Сообщения
nitron

есть таблица со следующими данными:
id - порядковый номер сообшения
from - id пользователя, который отправил сообшение
to - id пользователя, которому предназначается сообщение
time - время отправки
message - текст сообшения
type - модификатор. прочитано или нет
(визуально см. скрин table.jpg)
-----------------------
не могу составить запрос для того, чтобы определить количество пользователей, с которыми велись диалоги
(визуально см. скрин dialogi_main.jpg)
-----------------------
также прикрепляю код (txt|zip), который использую в настоящее время, поправьте пожалуйста

03 Янв 2013, 21:28
iceman12

Посмотрите в сторону оператора SELECT DISTINCT

03 Янв 2013, 21:32
nitron

iceman12, получается два запроса:
SELECT DISTINCT `to` FROM `private` WHERE `to`=1 OR `from`=1;
SELECT DISTINCT `from` FROM `private` WHERE `to`=1 OR `from`=1;
Как их можно объединить? и не будет ли это сильной нагрузкой для бд?

03 Янв 2013, 21:49
Gemorroj

SELECT `to` FROM `private` WHERE `from`=1 GROUP BY `to`;
По-моему этого достаточно будет.

03 Янв 2013, 21:54
HuKTO

nitron, рекомендую каждому диалогу присваивать номер, легче будет считать диалоги

03 Янв 2013, 21:56
nitron

Gemorroj, это только для исходящих получается. а если тебе кто то напишет, то ты не увидешь
добавлено спустя 1 минуту:
HuKTO, как именно? создать еще одну таблицу, в которой вести учет диалогов, а сами сообщения хранить в другой таблице?

03 Янв 2013, 22:00
Gemorroj

SELECT `to`, `from` FROM `private` WHERE `from` = 1 OR `to` = 1 GROUP BY `to`, `from`;

03 Янв 2013, 22:01
HuKTO

nitron, да, поюзай ссылки в бд

03 Янв 2013, 22:02
nitron

Gemorroj, в этом случае я выберу все сообщения, в которых участвовал пользователь, а надо id пользователей, с которыми он вел диалоги.
То есть, надо выбрать из тех сообщений сообщения с уникальными id пользователей
добавлено спустя 1 минуту:
HuKTO, что поюзать?

03 Янв 2013, 22:22
Gemorroj

Да, что-то я тормознул)
SELECT `to` AS `uniq` FROM `private` WHERE `from` = 1
UNION
SELECT `from` AS `uniq` FROM `private` WHERE `to` = 1;

03 Янв 2013, 23:00
Ответить на тему