How can I make this two queries in one ?
如何将这两个查询合二为一?
$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);
}
I have have tried this but it didn't work..
我试过这个,但它没有用..
$query = "SELECT * FROM `produto`, `pt` WHERE
produto.refPT = pt.ref AND
produto.refPT = (SELECT `idProduto` FROM `amb_prod` WHERE idAmbiente='".$ambId.");";
4 个解决方案
#1
This should work:
这应该工作:
$query = "SELECT * FROM `produto`, `pt` WHERE
produto.refPT = pt.ref AND
produto.refPT IN (SELECT `idProduto` FROM `amb_prod` WHERE idAmbiente='".$ambId.");";
I'm not sure about the table structure, but a join may work as well.
我不确定表结构,但连接也可以。
#2
With a join instead of subquery:
使用连接而不是子查询:
$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}'";
#3
You cannot have two cursors open in the same connection the same time. You need to open a second connection. I would strongly advise against that though; issuing a query for every row read would be a bit slow. If I were you, I would do this:
您不能在同一连接中同时打开两个游标。您需要打开第二个连接。我强烈建议不要这样做;为读取的每一行发出一个查询会有点慢。如果我是你,我会这样做:
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
Ideally, you would convert this to a parametrized query, for security, maintainabilty and performance resons. I'm not sure how it is done in PHP but the MySQLi_STMT class looks like a good starting point:
理想情况下,您可以将其转换为参数化查询,以实现安全性,可维护性和性能恢复。我不确定它是如何在PHP中完成的,但MySQLi_STMT类看起来是一个很好的起点:
#4
SELECT * FROM produto
, pt
, amb_prod
WHERE produto.refPT = pt.ref AND produto.refPT = amb_prod.idProduto AND amb_prod.idAmbiente='".$ambId."' ;
SELECT * FROM produto,pt,amb_prod WHERE produto.refPT = pt.ref AND produto.refPT = amb_prod.idProduto AND amb_prod.idAmbiente ='“。$ ambId。”';
Based on the data, you may have to use distinct in the select clause
根据数据,您可能必须在select子句中使用distinct
#1
This should work:
这应该工作:
$query = "SELECT * FROM `produto`, `pt` WHERE
produto.refPT = pt.ref AND
produto.refPT IN (SELECT `idProduto` FROM `amb_prod` WHERE idAmbiente='".$ambId.");";
I'm not sure about the table structure, but a join may work as well.
我不确定表结构,但连接也可以。
#2
With a join instead of subquery:
使用连接而不是子查询:
$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}'";
#3
You cannot have two cursors open in the same connection the same time. You need to open a second connection. I would strongly advise against that though; issuing a query for every row read would be a bit slow. If I were you, I would do this:
您不能在同一连接中同时打开两个游标。您需要打开第二个连接。我强烈建议不要这样做;为读取的每一行发出一个查询会有点慢。如果我是你,我会这样做:
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
Ideally, you would convert this to a parametrized query, for security, maintainabilty and performance resons. I'm not sure how it is done in PHP but the MySQLi_STMT class looks like a good starting point:
理想情况下,您可以将其转换为参数化查询,以实现安全性,可维护性和性能恢复。我不确定它是如何在PHP中完成的,但MySQLi_STMT类看起来是一个很好的起点:
#4
SELECT * FROM produto
, pt
, amb_prod
WHERE produto.refPT = pt.ref AND produto.refPT = amb_prod.idProduto AND amb_prod.idAmbiente='".$ambId."' ;
SELECT * FROM produto,pt,amb_prod WHERE produto.refPT = pt.ref AND produto.refPT = amb_prod.idProduto AND amb_prod.idAmbiente ='“。$ ambId。”';
Based on the data, you may have to use distinct in the select clause
根据数据,您可能必须在select子句中使用distinct