【问题标题】:SQL Inner Join for News Feed新闻提要的 SQL 内部联接
【发布时间】:2013-12-12 02:34:08
【问题描述】:

我在语句的 Inner Join 方面遇到了一些问题。我正在尝试从他们的新闻提要中的用户朋友列表中获取所有“帖子”。我试图通过获取用户是initiator_user_id的所有帖子并从friend_user_id获取所有帖子然后我想从initiator_user_id获取用户ID是friend_user_id的所有帖子。

以前这可行,但它只获取用户是initiator_user_id的帖子:

$wallsql= $conn->prepare('SELECT * FROM activity f INNER JOIN wp_bp_friends n2 ON n2.friend_user_id=f.user_id WHERE n2.initiator_user_id=:userid ORDER BY datetime DESC LIMIT 8');

用户 ID 24 可以看到用户 ID 22 的“帖子”,例如 22 的帐户何时创建以及他的状态更新。它需要做的是让 userid 22 也看到 userid 24 的更新。现在是一边倒的。我认为以下方法可以实现双向:

$wallsql= $conn->prepare('SELECT * FROM activity f INNER JOIN wp_bp_friends n1 ON (n1.initiator_user_id=f.user_id) INNER JOIN wp_bp_friends n2 ON (n2.friend_user_id=f.user_id) WHERE (n1.friend_user_id=:userid) OR (n2.initiator_user_id=:userid) ORDER BY datetime DESC LIMIT 8'); 
$wallsql->bindParam(':userid', $_SESSION['uid']);
$wallsql->execute();

这是表格及其设置方式。

wp_bp_friends table:

id     initiator_user_id     friend_user_id     is_confirmed     is_limited     date_created
11            24                    22                1               0          2013-12-11 11:17:26




Activity table:

ID     user_id                type                       component     filetype     group_id            content                     datetime
15        22             accountcreated                     NULL           NULL            0                NULL                2013-12-11 11:17:26
15        22                   status                       NULL           NULL            0           Hello World!          2013-12-11 11:17:26
15        24            accountcreated                      NULL           NULL             0               NULL                2013-12-11 11:17:26
15        24                   status                       NULL           NULL            0             Whats up            2013-12-11 11:17:26

【问题讨论】:

  • 对两个方向分别查询,并与UNION结合起来。
  • 我不熟悉 UNION。你能告诉我答案吗?我和客户有点时间紧张:-/我从来没有要求人们为我做这件事,但我需要快速帮助。

标签: php mysql sql inner-join


【解决方案1】:

这可能有效:

SELECT * 
FROM   activity f 
       INNER JOIN wp_bp_friends n2 
               ON n2.friend_user_id = f.user_id 
WHERE  n2.initiator_user_id = :userid 
UNION ALL 
SELECT * 
FROM   activity f 
       INNER JOIN wp_bp_friends n2 
               ON n2.initiator_user_id = f.user_id 
WHERE  n2.friend_user_id = :userid 
ORDER  BY datetime DESC 
LIMIT  8

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 2019-04-06
    • 2014-06-09
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2011-11-08
    相关资源
    最近更新 更多