没有从SQL查询输出

时间:2013-07-02 08:49:38

标签: php mysql

我正在尝试制作一个脚本,显示我朋友和我的最新帖子。 有3个与此相关的表 - statusUpdates(包含帖子),朋友(使用ID的朋友之间的链接)和用户(包含网站所有用户的详细信息)。 我目前使用的脚本如下。

$myQuery = mysql_query ("SELECT * FROM statusUpdates AS su 
             LEFT JOIN (friends AS fr) ON
                (fr.frHostID = su.authorID OR fr.frContactID = su.authorID) 
             WHERE (fr.frHostID = 105090)
             GROUP BY su.statusID
             ORDER BY su.statusID
             DESC LIMIT 0,5");

请注意,105090是我自己的身份证。

问题是,当我没有朋友时,即使我已经进行了多次状态更新,也没有出现任何帖子。

解决方案是在friends表中创建一行,将我添加为我自己的朋友。 但在这种情况下,我将不得不在“显示朋友列表”页面以及任何其他相关页面中阻止我自己的名字出现。

我最初使用INNER JOIN并遇到上述问题。然后我来了similar issue,并根据建议使用LEFT JOIN修改了我的脚本。它似乎已经解决了该职位OP的问题,但不是我的。 我不能在那篇文章中提交评论(可能是因为它已有2年了)。所以我正在创建这篇文章。

3 个答案:

答案 0 :(得分:3)

更新:我没有考虑到你也想要你朋友的帖子。

虽然您已经将答案标记为正确,但由于IN语句通常比JOIN慢,您可以尝试这样做:

SELECT * 
FROM statusUpdates AS su LEFT JOIN friends AS fr
ON fr.frContactID = su.authorID
WHERE (fr.frHostID = 105090 or su.authorID = 105090)
GROUP BY su.statusID
ORDER BY su.statusID
DESC LIMIT 0,5

INITIAL ANSWER:

只需更改where条件:

WHERE (fr.frHostID = 105090)

WHERE (su.authorID = 105090)

原因是你在左连接的右边部分放置了一个where条件,所以你强迫朋友存在。

顺便说一句,请关注这两个帖子:

Why shouldn't I use mysql_* functions in PHP?

How can I prevent SQL injection in PHP?

答案 1 :(得分:1)

请改用此查询:

SELECT * FROM statusUpdates AS su 
WHERE su.authorID = 105090 
OR su.authorID IN (
    SELECT fr.frContactID 
    FROM friends AS fr 
    WHERE fr.frHostID = 105090
)
GROUP BY su.statusID
ORDER BY su.statusID DESC 
LIMIT 0,5

答案 2 :(得分:0)

尝试此查询

SELECT * FROM statusUpdates 
WHERE autherID in (select frContactID from friends where frHostID = 105090)
or authorID = 105090
LIMIT 0,5