我的网站上有一个关注系统,您可以关注其他用户。
在网站的主页上,我试图让它显示您正在关注的用户的最新10个帖子(不是每个人关注的10个,但总共10个)。
我有一个名为followers
的表,其结构如下:
id | user_id | following_id
1 20 52
2 20 55
1 20 75
... ... ...
user_id
是您的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条最新帖子的查询/应该是什么。
请帮忙!
答案 0 :(得分: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和posting_at替换为你在帖子表中所称的内容。
答案 1 :(得分: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;