如何创建"最近的活动"使用PHP和SQL的部分?

时间:2018-01-22 03:11:29

标签: php mysql union-all

我正在尝试为用户的个人资料页面创建最近的活动部分。 在这个例子中,我有3个表。

一个是用户的表

+-------------+--------------+-------------+
:  user_id    :   username   :  join_date  :
+-------------+--------------+-------------+
:     1       :   myacct     :  2018-01-02 :
+-------------+--------------+-------------+
:     2       :   johndoe    :  2018-01-05 :
+-------------+--------------+-------------+

其次是blog_post表

+-------------+--------------+-------------+-----------+-----------+
:    id       :   author_id  :  title      :  content  : post_date :
+-------------+--------------+-------------+-----------+-----------+
:    1        :      2       :  Some stuff : I like... : 2018-01-05:
+-------------+--------------+-------------+-----------+-----------+
:    2        :      1       :  My Title   : This i... : 2018-01-04:
+-------------+--------------+-------------+-----------+-----------+

第三是回复

+-------------+--------------+-------------+-----------+-----------+
:    id       :   auth_id    :  headline   : content   : rep_date  :
+-------------+--------------+-------------+-----------+-----------+
:    1        :      1       :  thanks     : Nice p... : 2018-01-04:
+-------------+--------------+-------------+-----------+-----------+

我想要做的是从blog_posts.title列中获取all,并从replies.headline列中获取所有内容(将结果分组),其中author_id和auth_id对应于user_id。然后我想按日期降序排序。请注意,blog_posts和回复表的日期列的命名方式不同(因为它们在我的实际情况中)。然后,我想将结果限制为3(因此原因是它"最近的"活动)。

我尝试过使用UNION ALL取得了一些成功。虽然它将一个表中的所有内容分组,但随后会跟随其他表。另外,我对使用while循环和fetch_object()函数

在PHP中获取它感到困惑

1 个答案:

答案 0 :(得分:0)

尝试这样的事情......

SET ROWCOUNT 3
select username, title, post_date, type
from
(
    select username, title, post_date, 'blog post' as "type"
    from blog_post b
    join users u on u.user_id = b.author_id

    union all

    select username, headline as "title", rep_date as "post_date", 'reply' as "type"
    from replies r
    join users u on u.user_id = r.auth_id
) as FullQuery
order by post_date desc