Я делаю систему чата. Там мне нужно показать пользователю и последнее сообщение между ними. Мне нужна инъекция SQL.
Я хочу показать так:
Моя таблица базы данных:
О базе данных:
Есть две копии сообщения. ТАК, copy_uid означает, что это сообщение, которое пользователь копирует.
m_id: идентификатор сообщения
ua_id: пользователь, получивший сообщение, его идентификатор
u_id: пользователь, который отправил сообщение, его идентификатор
copy_uid: сообщение должно быть две копии один отправитель и другой получатель
Используйте эту структуру таблицы:
SELECT * FROM `message` `m1`
WHERE m_id IN (
SELECT MAX(m2.m_id)
FROM `message` `m2` WHERE m2.`sender` = 1 OR m2.`receiver` = 1
GROUP BY (IF(m2.`sender`= 1, m2.`receiver`, m2.`sender`)))
ORDER BY time DESC
Предположим, что текущий идентификатор пользователя 1
Я предлагаю упростить вашу структуру сообщений:
Я бы: автоматическое приращение
Удостоверение личности отправителя
recipient_id
послал: bool default 0
текст
следующее сообщение для user_id
select * from msg order by id desc
where recipient_id=user_id and sent=0
limit 1
store $ msgId = msg.id
после отправки
обновление набора сообщений отправлено = 1, где id = $ msgId