假设我有一个screenshots
表和一个replies
表。所以:每个屏幕截图都可以有多个回复(一对多)。现在,我想创建两者的组合时间线,但实际上,它们(在结构上)非常不相关。
如何从两个表中选择数据,按发布时间降序排列;例如,我可以发布一个帖子,发表一些评论,然后再发布另一个帖子;因为那将是时间表发生的方式?
通常从两个组合表中选择;但我不希望这种情况发生。在那个主题上,我还需要这些表是可区分的。这是表的结构...
-- -- Table structure for table `screenshots` -- CREATE TABLE IF NOT EXISTS `screenshots` ( `id` int(11) NOT NULL auto_increment, `user` int(11) NOT NULL, `description` text NOT NULL, `time` timestamp NOT NULL default CURRENT_TIMESTAMP, `ext` varchar(4) NOT NULL default 'png', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; -- -------------------------------------------------------- -- -- Table structure for table `screenshot_replies` -- CREATE TABLE IF NOT EXISTS `screenshot_replies` ( `id` int(11) NOT NULL auto_increment, `user` int(11) NOT NULL, `parent` int(11) NOT NULL, `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `text` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
注意:我意识到这可能与 this question 重复但我没有找到适合我的解决方案。
提前致谢! :)
最佳答案
你应该使用 UNION在这种情况下:
(SELECT id, time, 'screenshots' as tableName FROM screenshots)
UNION
(SELECT id, time, 'replies' as tableName FROM screenshot_replies)
ORDER BY time ASC
您可以使用 mysql_tablename 获取字段的表名PHP 函数
您可以将表名指定为结果集中的列
关于php - 来自 2 个相关表的时间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386255/