【问题标题】:Using the MySQL select statement使用 MySQL 选择语句
【发布时间】:2012-04-25 19:44:03
【问题描述】:

我想根据登录用户关注的用户来选择用户的帖子。我需要做什么?如何在一个 SELECT 语句中使用两个不同的表?我什至不知道从哪里开始。

我有 3 张桌子: 用户 帖子 追随者

谢谢。

【问题讨论】:

  • 你的表结构是什么?
  • 请提供您建表的SQL,可以帮忙。但它的要点是您使用外键和主键进行 JOIN。
  • 这个好像一个小时前已经为你详细解答了:stackoverflow.com/questions/10321532/…

标签: php mysql


【解决方案1】:
SELECT  p.*
FROM    followers f
JOIN    posts p
ON      p.author = f.following_id
WHERE   f.user_id = $logged_in
ORDER BY
        p.post_date DESC

由于您没有提供字段名称,因此我不得不编造它们。

【讨论】:

  • 您好 Quassnoi,如果想获得用户自己的帖子以及他们关注的帖子,我将如何将其添加到您的查询中?谢谢:)
  • @SaffronHarris:请将其作为另一个问题发布。
  • 谢谢,我已经把它贴在这里了stackoverflow.com/questions/13502671/…
【解决方案2】:

使用 JOIN 从两个表中进行选择 http://dev.mysql.com/doc/refman/5.0/en/join.html

基本上你从两个表中选择并定义 JOIN 条件。

假设您有两个表:

  • 具有以下列的用户:user_id、user_name、online_state
  • 具有以下列的帖子:post_id、user_id(发布此帖子的用户)、标题、消息

SELECT p.title, p.message FROM users u JOIN posts p ON u.user_id = p.user_id WHERE u.online_state = 'online'

加入条件应该在ON之后,非加入条件应该在WHERE之后

【讨论】:

  • 你也可以做 SELECT ... FROM table JOIN table2 ON 条件 JOIN table3 ON 条件 JOIN table4 ON 条件。
  • 联接优于子查询,因为您不会强制数据库评估整个子查询,尤其是使用依赖子查询是邪恶的
【解决方案3】:

我会按照 Quassonoi 在他的回答中建议的那样使用 Join 查询,如果您想尝试其他解决方案,可以使用这样的子查询来完成

SELECT P.PostId,P.Title,P.Body
FROM Post P WHERE P.CreatedById 
IN ( 
    SELECT FollowerID from Followers WHERE USER_ID=3
   )

3 替换为当前用户ID。假设你的表结构是这样的。

发布

PostId (int)
Title 
Body

关注者

UserId (int)
FollowerId (int)

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多