选择最新的行,每个ID一个

时间:2015-10-12 16:32:09

标签: mysql

我试图为每个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;

0 个答案:

没有答案