会話のメッセージを保存するために使用するテーブルがあります。これは私のクエリです:
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
この select ステートメントは、現在行っている会話のリストを表示するために使用されます。たとえば、これはまさに Android スマートフォンのテキスト メッセージ アイコンをクリックしたときに得られるアクティビティであり、そこでは会話のリストが表示され、それぞれの会話には、あなたと別の人との間で交換された最新のメッセージが含まれています。
select ステートメントで私が行っているのは、あなたの ID がto
orにあるメッセージを取得しfrom
、それをグループ化して、使用されている行があなたと他の人との間で交換された最新のメッセージになるようにすることです。
問題は、人が自分自身にテキストを送信すると、最新のテキストが表示されないことです。
誰が問題を知っていますか?
ありがとう。