在SQL查询中使用数组

时间:2012-04-25 18:23:33

标签: php mysql

好的,所以我想在我的网站上有一个新闻源。我有3个名为Users,Follow和Posts的表。基本用户数据进入Users表,谁跟随谁存储在Follow表中,以及用户帖子进入帖子的内容。现在,我知道如何从数据库表中选择每个帖子并使用WHERE子句限制它。但是,我如何编写查询以从他们正在关注的用户中选择所有帖子,并通过DESC日期显示它们?感谢。

2 个答案:

答案 0 :(得分:1)

这是一个适合你的总体布局,如你所提到的那样制作三张桌子,我在下面仅举例说明

[TABLES]

  • 用户
  • 追随者
  • 帖子

在users表中,您应至少拥有userid(自动递增值/主键)等列。

关注者表应该有类似userid的东西,它与users表userid匹配,一个followid列也可以从users表中获得跟随者的id#。

然后,对于你的帖子表,你也希望拥有userid,所以当每个帖子都有时,它会有来自users表的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列上,这样当表变大时,它将快速进行连接。

答案 1 :(得分:0)

@ 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(在Follow x-ref表上匹配跟随ID到用户ID),然后从Post表中查找他们各自的帖子按日期降序排列。如果他们不跟随任何人或他们关注的人没有帖子,它将返回空。

我也希望我不需要提醒您清理对数据库的输入并将输出转移到网上。

这是你要找的吗?