该交易如下:
假设我有2个表,文章和项目。分享一些列但却是截然不同的野兽。
我需要抓住最近发布的7篇文章或项目。然后,更令人沮丧的是,我想要抓住接下来的7个,然后再用接下来的7个来提供偏移量。
什么是最好的行动方案?有没有办法以这样的方式查询数据库,以便返回一个合并的结果集,它允许我轻松地抵消7来抓住下一个7?除了跟踪创建日期或其他一些malarky之外,还有更聪明的事情。
答案 0 :(得分:2)
如果您只是想要ID,那么这很容易:
select 'Article' as which, ArticleId as id, CreatedAt
from Articles
union all
select 'Project', ProjectId, CreatedAt
from Projects
order by CreatedAt desc
limit 7;
为防止关系,您应该使用:
order by CreatedAt desc, which, id;
答案 1 :(得分:1)
未经测试的代码,但以下查询(如果没有拼写错误)应该为您提供第一个需要的七个元素。
select id, createdAt, data_type
from ((select id, createdAt, 'Article' as data_type
from Article)
union
(select id, createdAt, 'Project' as data_type
from Project)) MyTable
order by createdAt desc
limit 0, 7
编辑:
您也可以使用上面作为子查询提供的内容并将其左侧连接到Article和Project表,并在大小写的帮助下使用所需的值,从而使它成为单个请求。