从单个查询中获取所有dbs的内容

时间:2012-04-12 05:42:07

标签: php mysql

我主要有3个主要表格,分别是新闻,专辑和视频。我想创建一个facebook墙类页面,其中来自所有三个表的所有更新将按发布时间按降序排序。

是否可以在db的单个查询中进行此类调用。

我将简要解释一下我的表格

新闻有id,标题,内容,时间戳
专辑有id,title,albumdirectory,timestamp
视频有id,title,youtubelink,timestamp。

如果不可能,最好的办法是什么。

3 个答案:

答案 0 :(得分:1)

这取决于数据的设计方式。如果使用某个共享ID全部相关,则可以进行单个连接查询以获取所有数据。如果该数据不相关,则需要进行3次单独调用。

答案 1 :(得分:1)

为此目的同时查询所有三个表格不是一个好习惯。您可以创建 Feed表。并从所需的所有其他表格中插入参考ID ,即(新闻,专辑,视频)以及该字段的日期。现在,您可以查询供稿表,并根据该表中的参考ID将加入放入其他三个表,并根据供稿表中的日期显示它们。我使用这种方法,这对我有用。

希望这有帮助。

答案 2 :(得分:0)

如果您在每个实体上想要的信息共享相同的结构(即ID,标题,时间戳),那么您可以使用UNION执行此操作

SELECT * FROM (
    SELECT CONCAT('news','-',id),title,`timestamp`
    FROM news
    UNION
    SELECT CONCAT('albums','-',id),title,`timestamp`
    FROM albums
    UNION
    SELECT CONCAT('videos','-',id),title,`timestamp`
    FROM videos
) AS all_items
ORDER BY `timestamp`

如果id字段在整个数据库中是唯一的(而不是仅在每个表中),那么你可以删除CONCAT并返回id。