如何在一个中进行两个查询?

时间:2009-04-21 11:46:55

标签: php mysql

如何将这两个查询合二为一?

$query = "SELECT * FROM `amb_prod` WHERE idAmbiente='".$ambId."';";
$result_set = mysql_query($query);

while($member = mysql_fetch_array($result_set)){
        $query2 = "SELECT * FROM `produto`, `pt` WHERE
        produto.refPT = pt.ref AND
        produto.refPT = $member['idProduto'] ;";
    $result_set2 = mysql_query($query2);
}

我已经尝试了这个但是没有用..

$query = "SELECT * FROM `produto`, `pt` WHERE
        produto.refPT = pt.ref AND
        produto.refPT = (SELECT `idProduto` FROM `amb_prod` WHERE idAmbiente='".$ambId.");";

4 个答案:

答案 0 :(得分:2)

这应该有效:

$query = "SELECT * FROM `produto`, `pt` WHERE
        produto.refPT = pt.ref AND
        produto.refPT IN (SELECT `idProduto` FROM `amb_prod` WHERE idAmbiente='".$ambId.");";

我不确定表结构,但是连接也可以正常工作。

答案 1 :(得分:2)

使用连接而不是子查询:

$query = "SELECT pr.*, pt.* 
FROM amb_prod ap 
JOIN producto pr ON (ap.idProduto = pr.refPT) 
JOIN pt ON (pr.refPT = pt.ref) 
WHERE idAmbiente='${ambId}'";

答案 2 :(得分:0)

您不能同时在同一连接中打开两个游标。您需要打开第二个连接。我强烈建议不要这样做;为读取的每一行发出查询会有点慢。如果我是你,我会这样做:

SELECT pr.*, pt.*
FROM "produto" pr, "pt" pt, amb_prod ap
WHERE produto.refPT = pt.ref
AND ap.idAmbiente = $ambId
AND produto.refPT = ap.idProduto

理想情况下,您可以将其转换为参数化查询,security,可维护性和性能调整。我不确定它是如何在PHP中完成的,但MySQLi_STMT类看起来是一个很好的起点:

答案 3 :(得分:0)

SELECT * FROM produtoptamb_prod WHERE         produto.refPT = pt.ref AND         produto.refPT = amb_prod.idProduto  AND amb_prod.idAmbiente ='“。$ ambId。”';

根据数据,您可能必须在select子句中使用distinct