【问题标题】:Mysql select query for getting user and follower's posts用于获取用户和关注者帖子的 Mysql 选择查询
【发布时间】:2013-03-31 09:13:22
【问题描述】:

这是我的选择查询语句:

select distinct posts.*, user_status.status_content 
from posts left join user_status on 
user_status.user_id = posts.user_id
where posts.user_id
= $userid or posts.user_id in 
(select follower from follower where follower.user_id = $userid) order by posts.created_at desc;

我的选择查询语句工作正常,只是输出不是我真正想要的。 我想要的是从当前用户及其关注者中选择所有帖子,每个帖子的用户名是他们最新的status content,状态由用户更新,我只想从表中选择最新的状态内容,那我怎么能做什么?

帖子表:

+------------+------------+------+-----+---------+----------------+
| Field      | Type       | Null | Key | Default | Extra          |
+------------+------------+------+-----+---------+----------------+
| id         | bigint(20) | NO   | PRI | NULL    | auto_increment |
| user_id    | bigint(20) | NO   | MUL | NULL    |                |
| content    | text       | NO   |     | NULL    |                |
| created_at | datetime   | YES  |     | NULL    |                |
+------------+------------+------+-----+---------+----------------+

user_status 表:

+----------------+--------------+------+-----+-------------------+-------+
| Field          | Type         | Null | Key | Default           | Extra |
+----------------+--------------+------+-----+-------------------+-------+
| user_id        | bigint(20)   | NO   | MUL | NULL              |       |
| status_content | varchar(225) | YES  |     | Hello World       |       |
| created_date   | timestamp    | NO   |     | CURRENT_TIMESTAMP |       |
+----------------+--------------+------+-----+-------------------+-------+

用户可以更新自己的状态,因此 user_status 表中将有多个记录。

我的选择查询可能会这样输出:

I feel like s**t today!!!!
Hello world
2013-03-28 22:34:14
-----------------------------
I don't feel very good today
Hello world
2013-03-28 22:34:14

我想要的是,假设 I feel like s**t today 是最新状态,所以它应该输出如下:

 I feel like s**t today!!!!
 Hello world
 2013-03-28 22:34:14

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    将此子句 - LIMIT 0,1 添加到您的 SQL 语句中。这基本上将结果的数量限制为最多一个(这将是最新的帖子)。根据MySQL reference manual for SELECT,LIMIT子句定义为:

    LIMIT 子句可用于限制 SELECT 语句返回的行数。

    我还认为您需要一个额外的 order-by 子句 - 例如:ORDER BY posts.created_at DESC

    【讨论】:

    • 这只有在他想为特定用户获取时才有效。如果他想获得所有用户的所有最新状态怎么办?那么添加肯定行不通。
    • @JW 是的,获取所有用户的所有最新状态,以及所有类似twitter 的帖子!但usernamestatus content 取代。
    【解决方案2】:

    无论您查看的用户 ID 数量如何,这里都有一个查询。它计算最近状态更改的日期,并将其用于连接:

    select distinct posts.*, user_status.status_content 
    from posts left join
         user_status 
         on user_status.user_id = posts.user_id left join
         (select user_id, max(created_at) as maxdate
          from user_status
         ) usmax
         on usmax.user_id = user_status.user_id and usmax.maxdate = user_status.create_at
    where posts.user_id = $userid or
          posts.user_id in (select follower from follower where follower.user_id = $userid)
    order by posts.created_at desc;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 2020-04-18
      • 2023-01-15
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多