繁体   English   中英

MySQL-会话历史记录概述-从表中选择多个最新项

[英]MySQL - Conversation History overview - Selecting multiple latest items from table

我很高兴通过用PHP构建一个自定义的消息传递系统(使用API​​来发送和接收消息)来重新创建电话。 我正在尝试在其桌面站点的Facebook消息传递中模拟其功能。

[Col 1]               [Col 2]
A list of the         Conversation View.
latest messages
received in order
of Newest to oldest

我在查询第一列时遇到问题。

我目前在MySQL中有一个具有以下结构的表:

CREATE TABLE IF NOT EXISTS `History` (
  `ID` int(10) NOT NULL AUTO_INCREMENT COMMENT 'MessageID',
  `Sender` varchar(10) NOT NULL,
  `Recipient` varchar(10) NOT NULL,
  `ExtReference` int(20) DEFAULT NULL,
  `Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Status` varchar(100) NOT NULL,
  `userid` int(3) NOT NULL,
  `Message` longtext NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=609 ;

日期示例设置为:

INSERT INTO `History` (`ID`, `Sender`, `Recipient`, `ExtReference`, `Date`, `Status`, `userid`, `Message`) VALUES
(1, '0412345678', '0468888888', 33845909, '2013-03-17 04:17:34', '1', 11, 'Just testing....'),
(2, '0412345678', '0400222333', 33845910, '2013-03-17 04:17:35', '1', 11, 'Amazing'),
(3, '0412345678', '0411111111', 33847419, '2013-03-17 04:46:04', '1', 8, 'Nothing here to see'),
(4, '0412345678', '0400222333', 33850155, '2013-03-17 06:31:57', '1', 12, 'Hello there Mr IT Guru :-)'),
(5, '0400222333', '0412345678', 33850179, '2013-03-17 06:33:21', '1', 12, '[Write message here]'),
(6, '0412345678', '0411111111', 33955423, '2013-03-23 01:26:22', '1', 8, 'Hello Charles'),
(7, '0412345678', '0411111111', 33959071, '2013-03-23 03:08:26', '1', 13, 'Sample Message'),
(8, '0400222333', '0412345678', 33964111, '2013-03-23 05:27:51', '1', 13, 'How do I use this system?'),
(9, '0400222333', '0412345678', 34107503, '2013-03-30 03:13:38', '1', 12, 'Is this thing on?'),
(10, '0412345678', '0401411210', 34230869, '2013-03-05 00:18:09', '1', 16, 'Hello')

(在此示例中,我的电话是:0412345678)。 SQL小提琴在这里: http ://sqlfiddle.com/#!2/29197/1/0

我已经解决了如何获取发件人和收件人列中使用的所有唯一编号的列表:

SELECT DISTINCT `Sender` AS phoneID FROM `History`
UNION
SELECT DISTINCT `Recipient` AS phoneID FROM `History`

但是我无法处理如何将最新的日期和消息附加到此数据。

如果我只关注发给我的消息或我发给我的消息,那么可以通过以下两种方式获得帮助:

SELECT `ID`, `Sender`, `Recipient`, MAX(`Date`), `Message` FROM History 
GROUP BY Sender
ORDER BY `History`.`Date` DESC

要么

SELECT `ID`, `Sender`, `Recipient`, MAX(`Date`), `Message`, `Status` FROM History 
GROUP BY Recipient
ORDER BY `History`.`Date` DESC

有什么想法吗? 如果需要,我可以重新创建“历史记录”表布局。

稍后,我还需要尝试将电话号码和人名一起加入“联系人”表中。

谢谢查理

可能不是最好的方法,但是您可以将两个查询结合起来。 就像是:

SELECT `ID`, `Sender`, `Recipient`,`Date`,`Message`,`Status` FROM
(
SELECT `ID`, `Sender`, `Recipient`, `Date`, `Message`,`Status` FROM History
  WHERE Sender = "0412345678"
GROUP BY Sender
UNION
SELECT `ID`, `Sender`, `Recipient`, MAX(`Date`), `Message`, `Status` FROM History 
  WHERE Recipient = "0412345678"
GROUP BY Recipient
) res

GROUP BY res.ID
ORDER BY res.Date DESC

请注意,这是一个特定的数字。 如果不需要,您可以删除WHERE子句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM