php - 从具有不同模式的多个 MySQL 表中选择 id 和时间戳

标签 php mysql sql mysqli

我在 MySQL 中有几个具有不同模式的不同表,但所有表都有一个自动递增的 ID 和一个时间戳(更准确地说,列名是 datetime 类型的“create_timestamp”)。

为了给这个问题提供更多背景信息,我正在构建一个社交数据聚合器,而我的 MySQL 数据库只是来自社交媒体 API 的缓存数据。因此,这些表适用于 Instagram、Youtube 视频、推文等。我的目标是根据它们的创建时间,从其中的每一个中查询总共 20 条记录。由于每个媒体 API 返回不同的数据,因此每个表都有非常不同的架构。

在伪代码中,我试图完成这个:

SELECT * FROM instagrams, tweets, youtube_videos, tumblr_posts ORDER BY create_time DESC LIMIT 20;

我意识到我可能只需要查询所有 ID 和表类型,然后在 PHP 中循环遍历它们以获取它们各自的数据。例如更多伪代码:

MySQL

SELECT id, table_name FROM instagrams, tweets, youtube_videos, tumblr_posts ORDER BY create_time DESC LIMIT 20;

PHP

-For each result from that query as $row, query for:
SELECT * FROM $row["table_name"] WHERE id=$row["id"]

将这些数据导入我的 PHP 应用程序的最佳和最有效的方法是什么?


更新:

谢谢 Dan,使用 UNION 这就是我选择 ID 和表名的方法。

SELECT id, create_timestamp, "instagrams" as "table_name" FROM instagrams
UNION
SELECT id, create_timestamp, "tumblr_posts" as "table_name" FROM tumblr_posts
UNION
SELECT id, create_timestamp, "wordpress_posts" as "table_name" FROM wordpress_posts
UNION
SELECT id, create_timestamp, "tweets" as "table_name" FROM tweets
UNION
SELECT id, create_timestamp, "youtube_videos" as "table_name" FROM youtube_videos
UNION
SELECT id, create_timestamp, "manual_photo" as "table_name" FROM manual_photo
ORDER BY create_timestamp DESC
LIMIT 20

然后在 PHP 中,我循环遍历并一次查询一条他们的个人记录。

最佳答案

使用子查询获取每个表的最新 20 个条目,并使用外部查询从联合集中获取最新的 20 个条目。并在 PHP 中看到您想要的表名,只需将表名放在 select 子句中即可。

您不能只合并每个表的 select *,因为正如您所说,这些表有不同的“方案”。

select * from (
    (select 'instagram' as table, id, create_time from instagram order by create_time desc limit 20)
    union
    (select 'tweets' as table, id, create_time from tweets order by create_time desc limit 20)
    union
    (select 'youtube_videos' as table, id, create_time from youtube_videos order by create_time desc limit 20)
    union
    (select 'tumblr_posts' as table, id, create_time from tumblr_posts order by create_time desc limit 20)
)t
order by create_time
limit 20

关于php - 从具有不同模式的多个 MySQL 表中选择 id 和时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856724/

相关文章:

php - 如何计算出日期范围内的特定日期和时间

php - add_filter 与 add_action 之间的区别

php braintree 集成

php - 插入和更新记录

php - 创建声音-读取字母-在PHP中

mysql - python : sqlalchemy - how do I ensure connection not stale using new event system

MySQL 返回存储过程抛出的确切错误/警告

php - Apache 正在工作,但 Mysql 模块无法在 xampp v3.2.1 windows 7 上工作

php - 显示内部连接表在 1 列中有不同的值

sql - 如何处理有结果的 ADO 查询与无结果的查询?