我想从两个不同的mysql表中收集数据,按时间戳对结果进行排序,但不要将两个表的列合并到一行中。
一个(one_id
,one_someinfo
,one_ts
)
两个(two_id
,two_otherinfo
,two_ts
)
请注意,字段two_otherinfo与one_someinfo不同,唯一共同的列是id和timestamp。
结果应该是按时间戳排序的两个表的组合,但是根据时间戳的不同,每一行应该只包含表的相应列。
例如,如果最新记录来自Tú2,则该行的TúONEone_someinfo
列应为空。
我只需要从Tç1订购最新消息,并在Tç2上发布最新消息,这样表格就不相关了。我想避免使用2个查询,然后用PHP按时间戳合并和排序结果。有人知道解决这个问题的办法吗?提前谢谢
这是桌子的结构
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL auto_increment,
`fromid` int(10) NOT NULL,
`toteam` int(10) NOT NULL,
`banned` tinyint(1) NOT NULL default '0',
`replyid` int(15) default NULL,
`cont` mediumtext NOT NULL,
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE `stars` (
`id` int(10) unsigned NOT NULL auto_increment,
`daynum` int(10) NOT NULL,
`userid` int(10) NOT NULL,
`vote` tinyint(2) NOT NULL default '3',
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
INSERT INTO `posts` (`fromid`, `toteam`, `banned`, `replyid`, `cont`, `timestamp`) VALUES(5, 12, 0, 0, 'mess posted#1', 1222222220);
INSERT INTO `posts` (`fromid`, `toteam`, `banned`, `replyid`, `cont`, `timestamp`) VALUES(5, 12, 0, 0, 'mess posted#2', 1222222221);
INSERT INTO `posts` (`fromid`, `toteam`, `banned`, `replyid`, `cont`, `timestamp`) VALUES(5, 12, 0, 0, 'mess posted#3', 1222222223);
INSERT INTO `stars` (`daynum`, `userid`, `vote`, `timestamp`) VALUES(3, 160, 4, 1222222222);
INSERT INTO `stars` (`daynum`, `userid`, `vote`, `timestamp`) VALUES(4, 180, 3, 1222222224);
按
timestamp DESC
排序的结果应该是timestamp
122222224的表星的第二个记录,然后是timestamp
12222222223的表柱的第三个记录以及随后的记录。。。由于表之间有不同的字段,结果的第一行应该包含表星的列,而表柱的列应该是空的。 最佳答案
联合的列在每一行上必须具有相同的名称和数据类型。实际上,在第一个UNION子查询中声明列别名,因为它忽略了在后续子查询中重命名列的任何尝试。
如果需要两个子查询中的列不同,请将NULL作为占位符。下面是一个示例,获取公共列id和时间戳,然后从每个子查询中获取一个自定义列。
(SELECT p.id, p.timestamp AS ts, p.fromid, NULL AS daynum FROM posts)
UNION
(SELECT s.id, s.timestamp, NULL, s.daynum, FROM stars)
ORDER BY ts DESC
还要将子查询放在括号中,这样最后一个ORDER BY将应用于联合的整个结果,而不仅仅是最后一个子查询。
关于mysql - MySQL从2个不相关的表中按时间戳排序选择记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7479104/