迷失了MySQL

时间:2013-11-18 07:50:47

标签: mysql

我的网站上有各种各样的用户都有包含帖子的表格。

我想为个人用户创建一种方式,从朋友的桌子上提取帖子。

基本上是这样的:

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很陌生,所以我确信只有我缺少的东西

提前谢谢

3 个答案:

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

这不是完美的,而是一个很好的起点。