【发布时间】:2021-09-25 06:03:43
【问题描述】:
我正在尝试构建一个聊天列表页面,其中最新发送/接收的联系人显示在一个表格的顶部。为此,我有一张表smshistory 存储发送/接收的短信,其中一个是公司电话,另一个是客户电话号码
CREATE TABLE IF NOT EXISTS `smshistory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fromnumber` varchar(20) NOT NULL,
`tonumber` varchar(20) NOT NULL,
`sms` varchar(20) NOT NULL,
`added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
--
-- Dumping data for table `smshistory`
--
INSERT INTO `smshistory` (`id`, `fromnumber`, `tonumber`, `sms`, `added`) VALUES
(1, 'companynum', 'client1num', 'Hello', '2021-07-16 12:28:23'),
(2, 'companynum', 'client2num', 'Hello', '2021-07-16 12:28:23'),
(3, 'companynum', 'client3num', 'Hello', '2021-07-16 12:28:23'),
(4, 'client1num', 'companynum', 'Hi', '2021-07-16 12:28:23'),
(5, 'companynum', 'client1num', 'Hello', '2021-07-16 12:28:23'),
(6, 'client1num', 'companynum', 'Hi', '2021-07-16 12:28:23'),
(7, 'client2num', 'companynum', 'Hi', '2021-07-16 12:28:23'),
(8, 'companynum', 'client2num', 'Hello', '2021-07-16 12:28:23'),
(9, 'client3num', 'companynum', 'Hi', '2021-07-16 12:28:23');
因为第一条消息总是来自公司编号,所以我显示DISTINCT 列表:
SELECT DISTINCT (`tonumber`) FROM `smshistory` WHERE `fromnumber` = $companynum
这给了我这样的清单:
client1num
client2num
client3num
要求:
我需要以added DESC 列的顺序显示DISTINCT,如果客户的号码在fromnumber 或tonumber 中,它应该显示在顶部。所以,根据我的表格,结果应该是:
client3num
client2num
client1num
小提琴位于http://sqlfiddle.com/#!9/4256d1d/1
你知道如何实现吗?
【问题讨论】:
-
观察一下:DISTINCT 不是函数
-
我不明白排序规则。如果是因为行中有数字“3”、“2”和“1”,那么数据库设计可能需要快速重新考虑!
-
@JSBach 是的,数据库设计非常糟糕,但由于它是我的任务,所以我无法更改它,需要相应地提供结果。
-
所以问题是'如何根据这些字符串中包含的数字对字符串集合进行排序?'
标签: mysql group-by max case inner-join