通过使用另一个表中的ID查询获取最新的10行

时间:2013-11-03 22:14:28

标签: php mysql greatest-n-per-group

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

在网站的主页上,我试图让它显示您正在关注的用户的最新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条最新帖子的查询/应该是什么。

请帮忙!

2 个答案:

答案 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;