2013-03-31 3 views
1

Я структурирую таблицы для создания функции пользовательского сообщения с диалоговым окном в моей системе OA.mysql query возвращающий «диалоговый идентификатор указанных paticipants»

Я получил таблицу с указанием участников диалога, как этот dialog_user:

dialog user 
1  1 
1  2 
2  1 
2  3 

Теперь пользователь 1 отправить сообщение пользователю 2. Таким образом, мне нужно, чтобы создать сообщение и вставить сообщение в диалоговом окне который использует пользователь 1 и пользователь 2.

Как найти идентификатор диалогового окна в рамках одного или ограниченного запроса?

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

Я думаю об экономии участников интегрировался упорядоченной строку как

dialog users 
1  1,2 
1  1,3 

, но я не думаю, что это хорошая практика, причина пользователей поля должно быть VARCHAR и ограниченной длиной (скажем, 255).

У кого-нибудь есть представление об этом?

+0

ли вы имеете в виду, что вы намереваетесь сохранить значение '1,2' в dbcolumn с типом VARCHAR? – bestprogrammerintheworld

+0

да, но может быть «1,2,3», «1,4,5,6». но парень ниже решил мою проблему и предотвратил сохранение данных, подобных этому. –

+0

Хорошо. Хорошо! :-) Извините, я до сих пор не отвечал, но вчера заболел. – bestprogrammerintheworld

ответ

1
SELECT d1.dialog 
FROM dialog_user d1 
JOIN dialog_user d2 USING (dialog) 
WHERE d1.user = 1 
AND d2.user = 2 
+0

это именно то, что мне нужно! большое спасибо! –

0

Может быть что-то вроде этого (при условии, DialogId/UserId индексируется):

SELECT 
    DISTINCT(DialogId) 
FROM 
    Dialogs d 
WHERE 
    EXISTS (SELECT NULL FROM Dialogs p1 WHERE p1.DialogId = d.DialogId AND p1.UserId = 1) 
    AND EXISTS (SELECT NULL FROM Dialogs p1 WHERE p1.DialogId = d.DialogId AND p1.UserId = 2) 
Смежные вопросы