我是网络开发的新手,正在开展第一个学校项目。
我正在尝试创建一个活动页面,显示社交网络中用户的所有近期活动。
我需要从posts
,comments
,likes
,messages
等不同的表中获取数据。我需要按日期订购它们并使用分页。
我以为我可以使用四个不同的语句然后合并生成的数组,但由于分页,我无法将所有数据丢弃,所以我需要LIMIT
和OFFSET
语句。
我需要的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
语句来自哪个,所以我可以用适当的方式表示它。
无论如何这可能吗? 谢谢:))
没有人知道如何获得这样的结果? :/
答案 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