Потоковый обмен сообщениями в MySQL и PHP вопрос - PullRequest
0 голосов
/ 11 апреля 2011

спасибо за помощь.

Я создаю многопоточную систему обмена сообщениями с использованием MySQL и PHP и возвращаю результаты в XML. Я пытаюсь создать систему, которая обрабатывает сообщения таким же образом, как и система SMS на iPhone - где между пользователями существует только 1 поток, а вверху отображаются потоки с самым новым контентом (независимо от того, было ли отправлено последнее сообщение). или получил).

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

Моя структура базы данных:

СООБЩЕНИЯ : id | отправитель | получатели | тело | время

У меня есть один огромный вопрос / проблема:

  1. Я не могу выполнить прямой запрос, где receientid = myid, поскольку пользователь мог отправить сообщение, но так и не получил ответ, и в этом случае сообщение без ответа все равно должно появиться (в хронологическом порядке) в «Входящие». Но если я выбираю сообщения, в которых оба senderid = myid ИЛИ receientid = myid, я получаю два потока, поскольку запрос сталкивается как с отправленным, так и с полученным сообщением между одними и теми же двумя пользователями. Как вернуть первое уникальное сообщение между двумя пользователями, а не первое уникальное полученное сообщение И первое уникальное отправленное сообщение?

  2. Я использую LEFT JOIN для соединения таблицы сообщений с таблицей пользователей, в которой есть имя пользователя. Я просто их на сообщениях .senderid = users.name. Это отлично работает для потоков, где текущий пользователь получает сообщение последним. Но для некоторых потоков, для которых текущий пользователь отправил единственное / последнее сообщение - вышеприведенный LEFT JOIN вернет имя текущего пользователя, а не имя пользователя, которому он отправил сообщение. Как я могу динамически написать что-то вроде «if ($ userid == senderid) {LEFT JOIN users ON users.id = messages.recipientid;} else {LEFT JOIN users ON users.id = senderid}?

Спасибо!

1 Ответ

1 голос
/ 11 апреля 2011

Может как то так?

WHERE
  (senderid = $otheruser
   AND recipientid = $currentuser)
  OR
  (senderid = $currentuser
   AND recipientid = $otheruser)
...