【发布时间】:2013-04-19 21:02:55
【问题描述】:
“user”表列名称为“id”、“username”、“name_surname”、“password”。
“friends”表列名称为“user_id”、“friends”、“requests”、“bans”。
“wall”表列名称为“id”、“post”、“access”、“date”、“owner_id”、“poster_id”。
当用户访问他的帐户页面时,他正在像 facebook 一样写下“他的想法”,他可以选择谁可以阅读该帖子。但是当他要阅读墙的帖子时,他一定不能阅读所有帖子。他只有在他的 id 位于海报的朋友栏时才能阅读。
例如,我的 id 是 3,poster id 是 5,friends 字段将值保存为 jason 数据。
在“user”表中,id=>3,username=>user1,name=>John,password=>1234
在“friends”表中,user_id=>5,friends=>[1,2,3,4,7,8],requests=>[11,12,13],bans=>[31,32,33]
在“墙”表中,id=>1,posts=>这里是我的想法,access=>friends_only,date=>2013-04-25 19:23:00,owner_id=>7,poster_id=5
根据以上信息,我是id=3的朋友,id=5的用户,所以可以看id=1的墙贴。在所有的胃痛中,我没有设法编写sql查询。这是我的荒谬查询。
"SELECT w.*, u.* FROM wall AS w"
. " LEFT JOIN user AS u ON u.id=w.poster_id"
. " WHERE w.access='everybody'"
. " OR (SELECT * FROM wall WHERE w.access='friends_only'"
. " IN (SELECT * FROM friends WHERE friends contains 3) )"
. " ORDER BY w.id DESC LIMIT 0,5"
请您帮我编写正确的查询吗? 亲切的问候。
【问题讨论】:
-
最好为每个朋友设置不同的行,而不是使用 JSON 数组。你的朋友表应该是:user_id、friend_id、requests、bans
-
现在太晚了。所有的友谊系统和其他基于这个逻辑。 :)
-
为什么没有多对多表?你确定吗?因此,您需要一个查询:正确显示墙壁,但仅根据访问中指定的发布者显示允许用户查看的帖子...
-
相反,少了表。因为如果用户有 100 个朋友,正如你所说,它需要 100 个不同的行。但在 json 数据格式中,一个用户需要一行。反正没关系。你能帮我编写 sql 查询代码来解决我的问题吗?
-
请参阅stackoverflow.com/questions/786918/…,这正是我们正在讨论的内容。 JSON 数组本质上是一个分隔列表。
标签: mysql