Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从关系数据库(即MySQL)中的两个不同表中获取有序的createdAt集_Mysql_Sql - Fatal编程技术网

从关系数据库(即MySQL)中的两个不同表中获取有序的createdAt集

从关系数据库(即MySQL)中的两个不同表中获取有序的createdAt集,mysql,sql,Mysql,Sql,交易如下: 假设我有两个表、文章和项目。它们共享一些列,但本质上是不同的 我需要抓取最近发表的7篇文章或项目。然后,更令人沮丧的是,我想要得到下一个7,然后再次得到下一个7,以及提供的偏移量 最好的做法是什么?有没有办法查询数据库,以返回一个合并的结果集,让我可以轻松地偏移7来获取下一个7?一定有比跟踪createdAt日期或其他一些马拉基更聪明的东西 如果您只需要ID,那么这很简单: select 'Article' as which, ArticleId as id, CreatedAt f

交易如下:

假设我有两个表、文章和项目。它们共享一些列,但本质上是不同的

我需要抓取最近发表的7篇文章或项目。然后,更令人沮丧的是,我想要得到下一个7,然后再次得到下一个7,以及提供的偏移量


最好的做法是什么?有没有办法查询数据库,以返回一个合并的结果集,让我可以轻松地偏移7来获取下一个7?一定有比跟踪createdAt日期或其他一些马拉基更聪明的东西

如果您只需要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;

未测试的代码,但下面的查询(如果没有输入错误)应该为您提供前七个必需元素

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
编辑:


您也可以通过使用我上面给出的作为子查询的内容,将其连接到文章表和项目表,并在case-when的帮助下使用所需的值,来发出一个请求。

您的结果集是什么样子的?SQL查询有预定义的列,因此这两个表的列必须相同。这是一个公平的观点,也是我试图理解的。我想知道我是否可以返回一组ID和createdAt日期,它们以某种方式标记为文章或项目,你知道吗?很好,在我回答之前发布。谢谢你的回答!作品还不错,我不得不对它稍加修改以归还我所需要的东西@LajosArpad有一个更好的开箱即用的答案,所以这次他得到了被接受的答案。@romanchukenator。我会非常小心使用相同的
CreatedAt
日期,并且您肯定应该使用
union all
而不是
union
,除非您根本不关心性能。