好的,所以我想在我的网站上有一个新闻提要。我有 3 个名为 Users、Follow 和 Posts 的表。基本用户数据进入 Users 表,谁在关注谁存储在 Follow 表中,用户发布的任何内容进入 Posts。现在,我知道如何从数据库表中选择每个帖子并使用 WHERE 子句对其进行限制。但是我将如何编写查询以从他们关注的唯一用户中选择所有帖子,并按 DESC 日期显示它们?谢谢。
2 回答
这是给您的总体布局,像您提到的那样制作三个表格,我在下面概述了一个示例
[表格]
- 用户
- 追随者
- 帖子
在 users 表中,您至少应该有诸如 userid (自动递增值/主键)之类的列。
追随者表应该有类似 userid 的东西,它将与用户表 userid 匹配,followid 列也将具有来自用户表的追随者的 id #。
然后对于您的帖子表,您也希望拥有用户 ID,因此当每个帖子发布时,它都会具有来自用户表的 ID。
然后,您需要执行以下操作:
SELECT p.*
FROM posts AS p
WHERE p.userid IN (SELECT followid FROM followers WHERE userid = ###)
ORDER BY p.date DESC
现在这真的取决于你如何让用户 id 来解决这个问题。如果您在用户登录类似于 Facebook 后使用会话传递用户 ID,那么您可以将 userid = ### 更改为 userid = ".$_SESSION['userid']." 但同样,这实际上取决于您如何传递用户 ID,但上述内容至少应该让您有所开始。
确保在 userid、followid 列上放置索引,这样当表变大时,它会快速进行连接。
@Shane 答案的替代方法是使用 JOIN 运算符:
'SELECT p.* // I prefer to name all the fields, but for brevity's sake I'll use the shorthand
FROM Posts AS p
INNER JOIN Follow AS f ON p.userid = f.followid
WHERE f.userid = '.$selectedUserID.'
ORDER BY p.date DESC;'
对于输入的用户 ID ($selectedUserID),它将查找他们关注的人的所有用户 ID(将关注 ID 与 Follow x-ref 表上的用户 ID 匹配),然后从 Post 表中按降序查找他们各自的帖子日期。如果他们不关注任何人或他们关注的人没有帖子,它将返回空。
我也希望我不需要提醒您清理您对数据库的输入并将您的输出转义到网络。
这是你要找的吗?