Nasıl ben bir iki sorguları yapabilirsiniz?

4 Cevap php

Nasıl biri bu iki sorgu yapabilir?

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

Bu çalışması gerekir:

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

Ben tablo yapısı hakkında emin değilim, ama bir birleşim de çalışabilir.

Bir yerine alt sorgu katılmak ile:

$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}'";

Sen aynı bağlantı aynı zaman açık iki imleci olamaz. Sen ikinci bir bağlantı açmak gerekir. Ben kuvvetle o düşünceden karşı tavsiye ediyorum; her satır okuma için bir sorgu yayımlayarak biraz yavaş olacaktır. Ben olsaydım, ben bunu istiyorum:

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

İdeal olarak, security, maintainabilty ve performans resons için, bir parametrized sorgu için bu dönüştürmek istiyorsunuz. Ben PHP yapılır nasıl emin değilim ama MySQLi_STMT class iyi bir başlangıç ​​noktası gibi görünüyor:

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

Verilere dayanarak, select yan tümcesinde ayrı kullanmak zorunda kalabilirsiniz