2013-07-08 28 views
0

我目前正在与一组4人在一个小社交网络上工作。我目前正在处理这个Feed,并且遇到了一个小问题。MySQL:Feed帖子显示次数太多

我基本上有一个想法,为什么这个问题正在发生,但我不知道我应该如何解决它。

我有两张桌子。 1个帖子本身(称为posts),另一个用于用户朋友(称为users_friends)。

帖子表: This is the posts table.

users_friends表:

This is the users_friends table

JOIN这两个表,这样我可以只显示你是朋友与用户的帖子。

我的查询是这样的:

SELECT * 
FROM posts 
JOIN users_friends 
ON posts.username = users_friends.friend 
OR posts.username = '{$db['username']}' 
WHERE users_friends.user = '{$db['username']}' 
ORDER BY timestamp DESC 

$db['username'] =登录的用户名

因为我的用户,shawn31313,在users_friends表两次出现时,每个岗位加倍。使用此查询的结果是:

enter image description here
我不知道如何解决此问题。这是我第一次使用JOIN,我相当新的MySQL一般,所以我不知道现在要做什么。谢谢你的帮助。

回答

0

我认为你的查询存在一些问题。当我看着你的数据库结构,然后我可以看到邮政表中有用户名列。该用户名是发布评论的用户,对吗?如果是这样,那么你只需要检查该用户是否在你的朋友列表中。

,你可以这样做

SELECT * 
FROM POSTs 
WHERE USERNAME IN (SELECT FRIENDS FROM USER_FRIENDS WHERE USER = 'shawn31313' union all select 'shawn31313') 

更多更快的查询将是:

SELECT * 
FROM POSTs AS A INNER JOIN (SELECT FRIENDS FROM USER_FRIENDS WHERE USER = 'shawn31313' union all select 'shawn31313') AS B ON A.USERID = B.FRIENDS 

的逻辑是找到你所有的朋友,然后找到那些所有的职位。

+0

没有任何方法的工作。首先,所有的名字都是错误的。没有'后'表...有一个'职位'表。当我解决所有这些问题时,我会得到一个空的结果。 – Shawn31313

+0

@ Shawn31313“shawn31313”是当前用户权限?所以这个用户可以看到他们的朋友的帖子,对吧?但是我在帖子表中看不到任何“yitze”和“test123”的帖子。这就是你得到空的结果。 –

+0

那么,我需要能够看到我自己的帖子。 – Shawn31313