MySql:我可以将嵌套查询中的查询结果用作变量吗?

时间:2015-11-01 12:57:07

标签: php mysql

我试图节省服务器资源并减少查询次数

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

$names = ("SELECT * FROM table WHERE username like 'M%'");

这将返回M

中以table开头的所有名称

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

 $myname = ("SELECT * FROM $names WHERE username='Mohammad'");

我看到一个答案建议从内存中的第一个查询结果创建一个临时表,但这不是我需要的,因为我会保持$names很长一段时间,我可以' t将表保留在内存中,这将绘制服务器资源。

我尝试了它,就像上面的语法一样,有很多类似的方法,但它没有用

我不想在这样的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'");

等等

2 个答案:

答案 0 :(得分:0)

你需要删除双引号并将你的第一个表作为一个新表,让我们说`tbl1':

$myname = ("SELECT * FROM 
                        (SELECT * FROM table WHERE username like 'M%') as tbl1 
           WHERE tbl1.username='Mohammad'");

我认为你只需要调整查询就成了:

SELECT * FROM table WHERE username = 'Mohammad';
  

在这种情况下,由于您使用相同的表,因此无需嵌套表。

答案 1 :(得分:0)

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

$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
    }
}