我试图为每个user ID
选择一行用于对话列表。我试图向用户显示他们的活动对话列表(类似的功能可以在Facebook的消息页面上显示,它显示所有与个人资料名称和最新消息的对话,然后点击他们查看整个聊天记录),但只显示他们正在聊天的每个用户的最后一条消息。这是我到目前为止尝试使用的查询,用于从他们正在聊天的每个用户中选择一条消息,但它显示的是最旧的消息。我尝试更改ORDER并没有帮助,所以提供的任何帮助都表示赞赏:
SELECT `conversations`.`from_id`,
`profile`.`username`,
`conversations`.`date`,
`conversations`.`body`
FROM
`website`.`conversations`,
`website`.`profile`
WHERE
`conversations`.`to_id` = ?
AND `profile`.`profile_id` = `conversations`.`from_id`
GROUP BY `profile`.`user_id`
ORDER BY `conversations`.`id` DESC
LIMIT 15
我按会话ID排序(自动递增ID),所以我试图获得最高的ID(这是最新的记录),但是我做错了。< / p>
更新:这是表结构:
CREATE TABLE `conversations` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`to_id` int(10) unsigned NOT NULL,
`from_id` int(10) unsigned NOT NULL,
`body` mediumtext NOT NULL,
`date` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `to_id` (`to_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我尝试过来自其他&#34;类似&#34;的多个查询。问题(显然是编辑它们以使它们反映我的表格),其中没有一个有效。
再次更新:我尝试了以下查询,但现在只返回一行,我希望返回最多15个(我之前查询中的LIMIT 15)唯一对话:
SELECT p1.id, p1.body, profile.username
FROM profile, conversations p1 LEFT JOIN conversations p2
ON (p1.to_id = p2.to_id AND p1.id < p2.id)
WHERE p2.id IS NULL AND p1.to_id = *INSERT_USER_ID* AND profile.user_id=p1.from;