mysql - php - 需要从自引用数据中获取最新记录

时间:2013-05-17 10:51:27

标签: php mysql codeigniter self-referencing-table

enter image description here

您好, 我需要一些SQL帮助。附上我的桌子的形象。

如果您看到rootmessageid列,则有4条99条记录。所有这4个进行了一次完整的对话。

同样,119的两个记录进行了另一次对话。

116,117,118是单个消息对话。

现在我需要获取msgfrom = 7或msgto = 7的所有记录(这很容易)

现在复杂的一点。我想要每个对话中唯一的最新记录(基于datetimecreated)。

按照脚本创建此表。

CREATE TABLE IF NOT EXISTS `selectioncommunication` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `comactionid` int(11) NOT NULL,
  `usercomment` varchar(2048) DEFAULT NULL,
  `msgfrom` int(11) NOT NULL,
  `msgto` int(11) NOT NULL,
  `projectid` int(11) NOT NULL,
  `parentmessageid` int(11) NOT NULL,
  `datetimecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `rootmessageid` int(11) NOT NULL,
  `isread` tinyint(1) NOT NULL DEFAULT '0',
  `isclosed` tinyint(1) DEFAULT '0',
  `relative_date_time` datetime DEFAULT NULL,
  `consultant_response` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=121 );

3 个答案:

答案 0 :(得分:0)

使用ORDER BY datetime ASC / DESC

这将按顺序对结果进行排序,然后将LIMIT 1添加到查询结尾,以便只获取列表中的第一条记录。

答案 1 :(得分:0)

你想要groupwise maximum

SELECT s.*
FROM   selectioncommunication s NATURAL JOIN (
  SELECT   parentmessageid, MAX(datetimecreated) datetimecreated
  FROM     selectioncommunication
  WHERE    msgfrom = 7 OR msgto = 7
  GROUP BY parentmessageid
) t
WHERE  s.msgfrom = 7 OR s.msgto = 7

答案 2 :(得分:0)

以下是SQl Fiddle没有Join

的情况
SELECT *
FROM selectioncommunication k
WHERE datetimecreated = (SELECT
                           MAX(datetimecreated)
                         FROM selectioncommunication s
                         WHERE s.rootmessageid = k.rootmessageid
                         GROUP BY s.rootmessageid
                         ORDER BY s.id)