спасибо за помощь.
Я создаю многопоточную систему обмена сообщениями с использованием MySQL и PHP и возвращаю результаты в XML. Я пытаюсь создать систему, которая обрабатывает сообщения таким же образом, как и система SMS на iPhone - где между пользователями существует только 1 поток, а вверху отображаются потоки с самым новым контентом (независимо от того, было ли отправлено последнее сообщение). или получил).
Моя простая идея состоит в том, чтобы иметь базовую страницу, называемую "темы", которая является чем-то вроде входящей почты. Я хотел бы вытащить все отдельные темы (и последнее сообщение отправлено или получено) здесь. Когда вы нажимаете на ветку, я запрашиваю базу данных обо всех сообщениях / ответах между этими пользователями.
Моя структура базы данных:
СООБЩЕНИЯ : id | отправитель | получатели | тело | время
У меня есть один огромный вопрос / проблема:
Я не могу выполнить прямой запрос, где receientid = myid, поскольку пользователь мог отправить сообщение, но так и не получил ответ, и в этом случае сообщение без ответа все равно должно появиться (в хронологическом порядке) в «Входящие». Но если я выбираю сообщения, в которых оба senderid = myid ИЛИ receientid = myid, я получаю два потока, поскольку запрос сталкивается как с отправленным, так и с полученным сообщением между одними и теми же двумя пользователями. Как вернуть первое уникальное сообщение между двумя пользователями, а не первое уникальное полученное сообщение И первое уникальное отправленное сообщение?
Я использую 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}?
Спасибо!