在PHP和MySQL中显示我的帖子以及关注者帖子

问题描述:

我正在尝试制作一个类似Facebook的主页,因此它可以显示来自我关注的人的帖子,但我无法看到自己的帖子职位,因为我不能跟随我自己。这是我写的SQL代码行(它包含PHP变量):在PHP和MySQL中显示我的帖子以及关注者帖子

SELECT * 
FROM user_posts 
INNER JOIN user_following ON user_posts.username = user_following.username 
WHERE user_following.follower = '$me->username' 
ORDER BY id DESC 
LIMIT 0, 15 
  1. user_posts表包含了所有的帖子。
  2. user_following表包含所有跟随数据,其中username在用户被跟踪,并且follower是继username
  3. $me->username被记录在用户的用户名的用户。

user_posts表结构: enter image description here

user_following表结构: enter image description here

谢谢,提前!

+1

'mysql_ *'方法很久以来不推荐使用。请使用PDO或'mysqli_ *'方法。 –

+0

我必须使用'mysql'作为我正在使用的网站'mysql' – Arqetech

+1

我猜你应该使用'LEFT JOIN'并添加'OR user_posts.what_field_holds_username ='$ me-> username' '到你的'WHERE'子句。还要注意'*'带回谓词表和连接表的每一列,所以名称冲突可能是一个问题。 –

有几个不同的方式对皮肤此查询:

子查询

SELECT * 
FROM user_posts 
WHERE user_posts.username = 'bob' 
OR user_posts.username IN(
    SELECT username 
    FROM user_following 
    WHERE user_posts.username = user_following.username 
) 
LIMIT 0, 15 

http://sqlfiddle.com/#!9/6bf2c6/9

使用用户表

需要GROUP BYDISTINCT user_posts.id,这是非最佳。

SELECT 
    user_posts.* 
FROM users 
LEFT JOIN user_following ON users.username = user_following.username 
INNER JOIN user_posts ON (
    users.username = user_posts.username 
    OR user_following.follower = user_posts.username 
) 
WHERE users.username = 'bob' 
GROUP BY user_posts.id 
LIMIT 0, 15 

http://sqlfiddle.com/#!9/d91be/1

重要!确保并索引表格中的这些列。否则,表格会变得更大(尤其是user_following),表现会受到影响。

+0

考虑到OP没有提供'CREATE TABLE'模式,并且你不得不使用截图,那么Fiddles非常棒! – halfer

试试这个代码:

select * 
from user_posts up 
join user_following uf on up.username = uf.username 
where uf.follower = '$me->username' 
or up.username = '$me->username' 
+1

如果你可以提供关于表格结构的更多信息,它会很容易。 –

+1

不是我的问题 - 你可以等待OP提供它,或者做一个有教育的猜测':-)' – halfer

+1

好吧我将把数据库结构 – Arqetech