У меня есть таблица, которую я использую для хранения сообщений для разговора. Это мой запрос:Группа не работает должным образом в операторе выбора mysql
SELECT
a.id,
a.`from member_id`,
a.`to member_id`,
IF(a.`from member_id`={$targetID}, a.`to member_id`, a.`from member_id`) as other_id,
a.text,
MAX(a.`date sent`) as `date sent`,
a.to_read,
m.`first name`,
m.`last name`,
m.avatar_name,
m.avatar_status
FROM message a
JOIN members m on IF(a.`from member_id`={$targetID}, a.`to member_id`, a.`from member_id`) = m.id
WHERE (a.`from member_id`={$targetID} OR a.`to member_id`={$targetID}) AND a.active=1
GROUP BY IF(a.`from member_id`={$targetID}, a.`to member_id`, a.`from member_id`)
ORDER BY `date sent` DESC
В таблице сообщение как:
id int(11) id of the message
from member_id int(11) id of the person the message was sent from
to member_id int(11) id of the person the message was sent to
date sent datetime date of when it was sent
active tinyint(1) if the message is deleted
text longtext the text of the message
from_read tinyint(1) boolean to know if the person who sent it read it
to_read tinyint(1) boolean to know if the person who it got sent to read it
Этот оператор выбора используется для отображения списка разговоров вы в настоящее время есть. Например, это именно то действие, которое вы получаете, когда вы нажимаете значок текстового сообщения на Android-смартфоне, где вы видите список разговоров, и у каждого из них последнее сообщение, которое было обменено между вами и другим человеком.
Так что я делаю в инструкции select, получаю сообщения, в которых ваш идентификатор находится в to
или from
, а затем группируйте его так, чтобы используемая строка являлась последним сообщением, обменом между вами и другим человеком.
Проблема в том, что, когда человек отправляет им текст, сам последний текст не отображается.
Кто-нибудь знает, в чем проблема?
Спасибо.
Я не уверен, что я понимаю ваш запрос. Таблица сообщений содержит строки, которые являются сообщениями из нескольких разговоров. Я пытаюсь получить определенные строки из этой таблицы. Каждая из строк, которые я хочу, должна быть самым последним сообщением, которое обменивается между вами и другим человеком. Также необходимо упорядочить порядок возвращаемых строк, чтобы последний разговор был сверху. Также, когда группа по условию удовлетворяет более чем одной строке, я пытаюсь сделать ее так, чтобы она выбирала самую последнюю строку, потому что я помещал 'MAX (a.date sent) в качестве даты, отправленной сверху, так что это не делает выберете самую последнюю из них? – omega
@omega. , , Ответ на ваш вопрос «нет». Если вы хотите самый последний, вам нужно рассчитать его и присоединиться к нему. –