Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法从SQL查询中获取输出_Php_Mysql - Fatal编程技术网

Php 无法从SQL查询中获取输出

Php 无法从SQL查询中获取输出,php,mysql,Php,Mysql,我正在尝试制作一个脚本,它将显示我和朋友的最新帖子。 与此相关的有3个表-statusUpdates(包含帖子)、friends(使用ID的朋友之间的链接)和users(包含网站所有用户的详细信息)。 我现在使用的脚本如下 $myQuery = mysql_query ("SELECT * FROM statusUpdates AS su LEFT JOIN (friends AS fr) ON (fr.frHostID = su.au

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

$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是我自己的ID

问题是,当我没有朋友时,即使我更新了不止一次状态,也没有一篇帖子出现

解决方案是在friends表中创建一行,将我添加为自己的朋友。 但在这种情况下,我必须防止我自己的名字出现在“好友列表”页面和任何其他相关页面中

我最初使用的是
内部联接
,存在上述问题。然后我来了一个,按照建议用
LEFT JOIN
修改了我的脚本。它似乎解决了那个职位的OP问题,但不是我的。
我不能在那个帖子上发表评论(可能是因为它已经2年了)。因此,我创建了这篇文章。

使用此查询:

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

请改用此查询:

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
请尝试此查询

SELECT * FROM statusUpdates 
WHERE autherID in (select frContactID from friends where frHostID = 105090)
or authorID = 105090
LIMIT 0,5
请尝试此查询

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

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

尽管您已经将答案标记为正确,但由于语句中的
通常比
连接
慢,您可以尝试以下操作:

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
初始答案:

只需从以下位置更改where条件:

WHERE (fr.frHostID = 105090)

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

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


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

尽管您已经将答案标记为正确,但由于
语句中的
通常比
连接
慢,您可以尝试以下操作:

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
初始答案:

只需从以下位置更改where条件:

WHERE (fr.frHostID = 105090)

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

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



在新代码中。它们不再得到维护,而是在使用。改为学习准备好的语句,并使用or。@zessx目前我对PDO或MySQLi都不太了解。我将开始学习PDO后,我完成了这个项目,我需要尽快完成。但是谢谢你的建议,你不用担心。你不会花那么多时间去发现PDO或MySQLi。请记住,
mysql\uuz
已经被弃用,并将在未来的PHP版本中删除。在新代码中。它们不再得到维护,而是在使用。改为学习准备好的语句,并使用or。@zessx目前我对PDO或MySQLi都不太了解。我将开始学习PDO后,我完成了这个项目,我需要尽快完成。但是谢谢你的建议,你不用担心。你不会花那么多时间去发现PDO或MySQLi。请记住,
mysql\uuz
已经被弃用,并将在未来的PHP版本中删除。这就解决了目前的问题。非常感谢。但是你能帮我做另一件事吗?我需要从另一个表users中提取数据,该表包含诸如username、profileLink、profilePic等字段。我尝试在(u.roll=su.authorID)
上使用
内部连接(用户为u),但没有成功。事实上,使用内部连接阻止我的查询提取任何数据!但是,我以前的代码(原始帖子中的代码)也可以使用它。好吧,我找到了答案。修改后的代码现在读作
$myQuery=mysql\u query(“从statusUpdates中选择*作为su JOIN(用户作为u)ON(u.roll=su.authorID)其中su.authorID=105090或su.authorID IN(从friends中选择fr.frContactID作为fr.frHostID=105090)GROUP BY su.statusID ORDER BY su.statusID DESC LIMIT 0,5”)解决了目前的问题。非常感谢。但是你能帮我做另一件事吗?我需要从另一个表users中提取数据,该表包含诸如username、profileLink、profilePic等字段。我尝试在(u.roll=su.authorID)
上使用
内部连接(用户为u),但没有成功。事实上,使用内部连接阻止我的查询提取任何数据!但是,我以前的代码(原始帖子中的代码)也可以使用它。好吧,我找到了答案。修改后的代码现在读作
$myQuery=mysql\u query(“从statusUpdates中选择*作为su JOIN(用户作为u)ON(u.roll=su.authorID)其中su.authorID=105090或su.authorID IN(从friends中选择fr.frContactID作为fr.frHostID=105090)GROUP BY su.statusID ORDER BY su.statusID DESC LIMIT 0,5”)我知道你已经将答案标记为正确,但我更新了我的答案。非常感谢。它现在工作得很好。在LEFT JOIN子句之后添加了JOIN语句,以从其他表用户中提取用户名和其他详细信息<代码>在(u.roll=su.authorID)上加入(用户为u)
不过,这只是另一个问题。这是处理此类情况的最有效的技术吗?即使是对于大量的行?在我看来,根据我自己的经验,
JOIN
通常比
In
子句工作得更快,尤其是对于数千行,尽管这可能取决于您的查询,因为它们并不完全相同。通常,您必须对性能问题进行实验和测试。是否建议使用它们来处理更多的行,比如一百万行?或者还有其他选择吗?我会使用这个
左连接
示例,而不是
中的
,尤其是在那些情况下。我知道您已经将答案标记为正确,但我更新了我的答案。非常感谢。它现在工作得很好。公元