php—如何按共享的一列(日期)对两个没有关系的表和不同的列进行排序

hgncfbus  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(282)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

两年前关门了。
改进这个问题
我在mysql数据库中有两个表。一个是博客,一个是视频。每个列中的所有列都不同,只有一个列是创建它们的日期。
在我的网站主页上,我想显示最近的文章,无论是视频还是博客文章。所以我想根据他们的共享日期列来订购。这是我可以在mysql中做的,还是我必须将所有数据拉入php,然后使用我自己的函数进行排序。
我查过其他答案,但它们似乎都是表没有关系但共享相同列的情况。

ma8fv8wu

ma8fv8wu1#

对于要在您建议的相同结果集中使用的表,您需要一个联合;但是联合要求所有联合查询在其结果中具有相同的列。如果你唯一的共同点是“日期”;你能做的最好的事情就是这样。

SELECT `date` AS postDate, 'Video' AS postType
, someVideoField, null as someBlogField
FROM video_table
UNION 
SELECT `date` AS postDate, 'Blog' AS postType
, null as someVideoField, someBlogField
FROM blog_table
ORDER BY postDate
;

注意:后面的别名实际上是不需要的,我只是倾向于这样做,以便清楚地知道哪个字段应该Map到哪个字段。此外,还有 null as someBlogField 部分可能需要调整,以确保结果字段的类型可以接受来自联合后半部分的实际值;前半部分确定字段类型。

dw1jzc5e

dw1jzc5e2#

如果最终使用了两个查询,那么将它们放在脚本中就足够容易了。

while ($row = $blogQuery->fetch()) {
    $results[$row['date']]['blog'] = $row;
}

while ($row = $videoQuery->fetch()) {
    $results[$row['date']]['video'] = $row;
}

如果您在select查询中按日期排序,则除了只有视频查询有行的日期(或您第二次获取的任何一行)之外,这基本上已经是正确的顺序了。你可以 ksort($results) 来确定这些东西的顺序。

相关问题