我的网站上有各种各样的用户都有包含帖子的表格。
我想为个人用户创建一种方式,从朋友的桌子上提取帖子。
基本上是这样的:
User A: Post="Hello World!"
User B: Post="Another Post!"
User C: Post="Third!"
用户D是A和B的朋友,因此当他登录时,这就是我想要显示的内容:
Posts:
From USER A "Hello World!"
From USER B "Another Post!"
我希望有一种方法可以创建一个可以向用户A和用户B查找其数据的表,这样在代码中我只能说
SELECT * FROM MyFriendsPosts ORDERBY date_created;
它会显示我与朋友的帖子
我对MySQL很陌生,所以我确信只有我缺少的东西
提前谢谢
答案 0 :(得分:1)
正如rookieB所说,最好显示你的数据库架构。
帖子表:
UserId |交
友谊表
UserId | FriendId
每次用户与其他用户成为朋友时,您都会在友谊表中创建一个新行,因此:
A | B
显示A是B的朋友
或者
D | A
D | B
在您的示例中,显示D是A和B的朋友
然后,您可以使用子查询
SELECT * FROM posts WHERE posts.userId IN (SELECT FriendId FROM friendships WHERE UserId='THE_USER_SEARCHING' GROUP BY UserId)
或(我没有测试过这两种......从记忆中工作)
SELECT * FROM users LEFT JOIN friendships ON friendships.userid=posts.userId WHERE users.userId=friendships.friendId
根据您的数据库索引和行数等,这些将有不同的性能影响,我建议测试。
答案 1 :(得分:0)
SELECT * FROM TABLE_WHERE_YOU_STORE_FRIENDS_AND_POSTS WHERE user_id = ID_OF_USER_A AND user_id = ID_OF_USER_B ORDER BY date_created;
但我建议你创建3个表。一个用户,一个用于用户帖子,另一个用于朋友。
user
user_id | name | login | password
post
post_id | user_id | post_text
friends
user_id | friend_id
阅读JOIN
。
答案 2 :(得分:0)
假设构建数据库的一种合理方法是:
Post(id, text, date_created, uid);//uid === foreign key to table User
User(id, username);
FriendShip(uid1, frid);//both foreign keys to 2 different User
您的查询可能如下所示:
SELECT p.*
FROM Post p
WHERE p.uid IN (
SELECT f.frid
FROM Friendship f
WHERE f.uid = YOUR_ID
)
ORDERBY p.date_created;
这不是完美的,而是一个很好的起点。