从同一SQL查询中的不同表中订购不同的数据

时间:2016-05-20 03:26:35

标签: mysql pagination

我是网络开发的新手,正在开展第一个学校项目。 我正在尝试创建一个活动页面,显示社交网络中用户的所有近期活动。 我需要从postscommentslikesmessages等不同的表中获取数据。我需要按日期订购它们并使用分页。 我以为我可以使用四个不同的语句然后合并生成的数组,但由于分页,我无法将所有数据丢弃,所以我需要LIMITOFFSET语句。 我需要的SQL语句是这样的:

SELECT posts.stuff, comments.this, messages.that
FROM posts, comments, messages
ORDER BY ?????
LIMIT 10 OFFSET 0

如何按日期订购?如果所有表都有一个名为date的列用于日期吗?

使用MySQL,PHP和Bootstrap进行分页。

谢谢:D

修改

这些是我必须从中获取数据的表格:

[posts]
idPosts
title <--
description <--
date <--
`by` (FK) <--
category (FK) <--
"WHERE `by`= '$user_id'"

[comments]
idComments
comment <--
date <--
post (FK) <--
`by` (FK) <--
"WHERE `by` = '$user_id'"

[likes]
idLikes
date <--
post (FK) <--
`by` (FK) <--
"WHERE `by` = '$user_id'"

[messages]
idMessages
message <--
date <--
`by` (FK) <--
`to` (FK) <--
"WHERE `by` = '$user_id' OR to = '$user_id'"

this_is_a_foreign_key (FK)
and
i_need_this_column_out_of_the_query <--

另外,我应该知道某一行的SELECT语句来自哪个,所以我可以用适当的方式表示它。

无论如何这可能吗? 谢谢:))

没有人知道如何获得这样的结果? :/

1 个答案:

答案 0 :(得分:1)

使用UNION ALL,然后将其包装在子查询中,以便按日期排序。

看起来像这样:

SELECT action
FROM (

    SELECT stuff AS action  --I'll use action as the column name
        , actionDate        --assuming that this is the column name of the date
        FROM posts

    UNION ALL               --because UNION only removes duplicate

    SELECT this
        , actionDate
        FROM comments

    UNION ALL

    SELECT that
        , actionDate
        FROM messages
) AS activities
ORDER BY actionDate 
LIMIT 10                    --no need for OFFSET if it is zero