假设我有一个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重复,但我没有找到适合我的解决方案。
提前致谢! :)
答案 0 :(得分:4)
在这种情况下你应该使用UNION:
(SELECT id, time, 'screenshots' as tableName FROM screenshots)
UNION
(SELECT id, time, 'replies' as tableName FROM screenshot_replies)
ORDER BY time ASC
您可以使用php中的mysql_tablename函数获取字段的表名
您可以将表名指定为结果集中的列
答案 1 :(得分:1)
每当我遇到这样的问题时,你发现它无法做某事,因为你无法构建一个可以提取数据的查询,我不得不开始想知道你有正确的数据模型吗? / p>
从你想要提取的数据开始,然后建立一个允许这样做的模型,而不是反过来,从长远来看,你会发现它更容易,也可能更快的性能和更好的灵活性。 / p>
看着那些桌子,我不得不问为什么有两个?出了什么问题:
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) default 'png', `parent` int(11), `text` text, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
这将允许你做你想做的事,轻松告诉它是否是一个屏幕截图(如果设置了ext),回复(如果设置了父设置)或......因为模型现在允许它...截图这是一个回复!!!