Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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/63.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 MySql:我可以在嵌套查询中使用查询结果作为变量吗?_Php_Mysql - Fatal编程技术网

Php MySql:我可以在嵌套查询中使用查询结果作为变量吗?

Php MySql:我可以在嵌套查询中使用查询结果作为变量吗?,php,mysql,Php,Mysql,我试图节省服务器资源,减少查询数量 我需要的是在另一个查询中使用一个保存查询结果的变量作为嵌套查询,如下所示 $names = ("SELECT * FROM table WHERE username like 'M%'"); $myname = ("SELECT * FROM $names WHERE username='Mohammad'"); 这将返回表中以M开头的所有名称 稍后我想使用$names作为嵌套查询,如下所示 $names = ("SELECT * FROM table

我试图节省服务器资源,减少查询数量

我需要的是在另一个查询中使用一个保存查询结果的变量作为嵌套查询,如下所示

$names = ("SELECT * FROM table WHERE username like 'M%'");
 $myname = ("SELECT * FROM $names WHERE username='Mohammad'");
这将返回
表中以
M
开头的所有名称

稍后我想使用
$names
作为嵌套查询,如下所示

$names = ("SELECT * FROM table WHERE username like 'M%'");
 $myname = ("SELECT * FROM $names WHERE username='Mohammad'");
我看到一个答案,建议从内存中的第一个查询结果创建一个临时表,但这不是我需要的,因为我将保留
$names
很长一段时间,并且我不能一直将该表保留在内存中,这将消耗服务器资源

我像上面的语法一样尝试了它,并且用了很多类似的方法,但是没有成功

我不想这样在1个查询中执行,因为每次我需要使用
$names

 $myname = ("SELECT * FROM ("SELECT * FROM table WHERE username like 'M%'") WHERE username='Mohammad'");
因为我需要第一个结果作为一个单独的变量,以便在脚本的其他地方使用它

编辑

我需要第一个查询,因为我将根据它执行许多查询,如

 $name = ("SELECT * FROM $names WHERE username='Many'");
 $name = ("SELECT * FROM $names WHERE username='Mando'");

依此类推

您需要删除双引号并将第一个表作为新表,比如说“tbl1”:

$myname = ("SELECT * FROM 
                        (SELECT * FROM table WHERE username like 'M%') as tbl1 
           WHERE tbl1.username='Mohammad'");
我认为您只需要将查询调整为:

SELECT * FROM table WHERE username = 'Mohammad';
在这种情况下,不需要嵌套表,因为您使用的是同一个表


您可以检索所有名称的列表,如下所示:

$names = $database->query("SELECT * FROM table WHERE username like 'M%'");
然后循环浏览检索到的名称,并一次处理每个名称:

$count = $names->rowCount();
for($i = 0; $i < $count; $i++) {
    if($names[$i]['username'] == "Mohammed") {
        // do something
    }
}
$count=$names->rowCount();
对于($i=0;$i<$count;$i++){
如果($names[$i]['username']==“Mohammed”){
//做点什么
}
}

为什么不从username='Mohammad'所在的表中选择*
?执行
从$names中选择*
,如果有人从您以前的搜索中搜索不存在的表,如“Manhattan”,您的查询将失败。你需要使用条件语句。我编辑了我的问题。谢谢大家