【问题标题】:How do I create a "Recent Activity" Section using PHP and SQL?如何使用 PHP 和 SQL 创建“近期活动”部分?
【发布时间】:2025-06-02 14:30:01
【问题描述】:

我正在尝试为用户的个人资料页面创建一个最近的活动部分。 对于这个例子,我有 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 列和 replies.headline 列中获取所有内容(将结果完全分组),其中 author_id 和 auth_id 对应于 user_id。然后我想按日期降序排列。请注意,blog_posts 和回复表的日期列的名称不同(因为它们在我的真实情况下)。然后,我想将结果限制为 3(因此原因是“最近”的活动)。

我尝试使用 UNION ALL 并取得了一些成功。尽管它将一张表中的所有内容分组,但随后其他表也随之而来。另外,我对在 PHP 中使用 while 循环和 fetch_object() 函数获取它感到困惑

【问题讨论】:

    标签: php mysql union-all


    【解决方案1】:

    试试这样的...

    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
    

    【讨论】:

    • 好吧,我只是给你 SQL 代码,而不是 PHP 代码。你可能也有问题。
    • 是的,看起来是这样。