0

我的网站上有一个关注系统,您可以在其中关注其他用户。

在网站的主页上,我试图让它显示来自您关注的用户的最新 10 个帖子(不是来自您关注的每个人的 10 个,而是总共 10 个)。

我有一个名为followers以下结构的表:

id  |  user_id  |  following_id
 1        20           52
 2        20           55
 1        20           75
...      ...          ...

您的 id在哪里user_id,是您follow_id关注的用户的 id。

然后我有一个名为的表posts,其中收集了用户的所有帖子。

我现在要做的是创建一个查询,从您关注的用户那里获取最新的 10 个帖子(按日期排序)。

这是我到目前为止所做的:

/* Select all users this person is following */
$stmt = $cxn->prepare('SELECT following_id FROM followers WHERE user_id = ?');
$stmt->bind_param('i', $user_id);
$stmt->execute();
$result = $stmt->get_result();

/* If a result exists, continue. */
if ($result->num_rows) {
    while ($row = $result->fetch_assoc()) {
        // not sure what to do here, how would the query look?
    }
} else {
    echo "You aren't following anyone!";
}

我不确定要/应该从您关注的人那里获得总共 10 条最新帖子的查询是什么。

请帮忙!

4

2 回答 2

3

您在正确的轨道上,但您的主要选择仍然是帖子,而不是关注者 - 这些是子查询。你可能想要这样的东西。

SELECT * FROM posts WHERE poster_id IN 
    (SELECT following_id FROM followers WHERE user_id = ?)
ORDER BY posted_at DESC
LIMIT 10

您编写的查询仍然存在,但它已被查询包围以获取实际帖子。用你在你的帖子表中调用它们的东西替换你的poster_id 和posted_at。

于 2013-11-03T22:18:28.810 回答
0
SELECT *
FROM posts p
JOIN followers f
ON p.author_id = f.following_id
WHERE f.user_id = ?
ORDER BY p.date DESC
LIMIT 10;
于 2013-11-03T22:44:25.007 回答