Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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
Php 按时间顺序从不同的表中获取帖子_Php_Mysql_Sql_Datetime - Fatal编程技术网

Php 按时间顺序从不同的表中获取帖子

Php 按时间顺序从不同的表中获取帖子,php,mysql,sql,datetime,Php,Mysql,Sql,Datetime,我有4个mysql表,即post\u type1,post\u type2,post\u type3,post\u type4。这4个表具有不同的列数和不同的结构。其中常见的列是'id',它是主键,时间(datetime)是写文章的时间。 如果我要从表中获取最后10篇帖子,我可以做如下操作: SELECT * FROM post_type1 ORDER BY time DESC LIMIT 10 但如果我想得到最后10篇文章,不管它们属于4张表中的哪一张 我想到了一个非常低效的想法,即从每个表

我有4个mysql表,即
post\u type1
post\u type2
post\u type3
post\u type4
。这4个表具有不同的列数和不同的结构。其中常见的列是
'id'
,它是主键,时间(datetime)是写文章的时间。 如果我要从表中获取最后10篇帖子,我可以做如下操作:

SELECT * FROM post_type1 ORDER BY time DESC LIMIT 10
但如果我想得到最后10篇文章,不管它们属于4张表中的哪一张

我想到了一个非常低效的想法,即从每个表中获取10条记录(总共40条记录),然后使用php应用合并排序并获取前10条记录。
有什么有效的方法可以做到这一点吗?我真的被困在这里面了。提前感谢。

使用一个
联合体来组合它们。由于它们有不同的列,您需要在子查询中为缺少的列添加占位符

SELECT *
FROM (
    SELECT "post_type1" AS tablename, id, time, col1, col2, NULL AS col3, col4, col5
    FROM post_type1
    ORDER BY time DESC LIMIT 10
    UNION
    SELECT "post_type2" AS tablename, id, time, col1, NULL, col3, col4, NULL
    FROM post_type2
    ORDER BY time DESC LIMIT 10
    UNION
    SELECT "post_type3" AS tablename, id, time, NULL, col2, col3, col4, col5
    FROM post_type3
    ORDER BY time DESC LIMIT 10
    UNION
    SELECT "post_type4" AS tablename, id, time, col1, col2, col3, NULL, NULL
    FROM post_type4
    ORDER BY time DESC LIMIT 10    
)
ORDER BY time DESC
LIMIT 10
确保所有表在
时间
列上都有索引:

ALTER TABLE post_type1 ADD INDEX (time)

为什么选择10个用户?我认为合并也不是一个好主意。我认为使用@Barmar编写的UNION并将结果放入数组是很好的。然后,您可以根据需要使用阵列执行任何操作

您所说的公共列是ID是什么意思?ID是四个表之间的外键吗?不,我的意思是ID是一个列,它存在于所有表中,尽管它们的结构不同。看起来是一个非常好的解决方案。但我想知道这个查询的速度。在效率方面,我能指望这一点吗?确保所有表中都有
时间的索引。那将是非常有效的。每个子查询将使用它们的索引获取每个子查询中最新的10行。那么合并和排序40行应该很简单。我如何才能按时添加索引?请告诉我。我没有完全明白。我在答案中加了一个例子是的,明白了。谢谢你,先生!