2009-04-21 22 views
1

この2つのクエリを1つにするにはどうすればよいですか?1つで2つのクエリを作成するにはどうすればよいですか?

$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.");"; 
+0

クエリ文字列の作成に変数補間を使用しないでください。むしろ、パラメータ化されたクエリを使用します。前者はSQLインジェクションに敏感です。 –

答えて

2

これは動作するはずです:

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

私はテーブル構造についてはよく分かりません、結合はうまくいくかもしれません。

+0

トピックが少しありますが、SQLコマンドを連結しないで、可能であればパラメータ化されたクエリを使用してください(このコードは潜在的にSQLインジェクションの対象です)。 – Lucero

+0

このテーブルが大きいテーブルでは遅い場合は、私の結合ソリューションをチェックしてください –

0

同時に同じ接続で2つのカーソルを開くことはできません。 2番目の接続を開く必要があります。私は強く反対することを勧めます。読み込まれたすべての行に対してクエリを発行するのは少し遅くなります。私があなただったら、私はこれを行うだろう:

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、maintainabiltyとパフォーマンスresonsのために、パラメータ化クエリにこれを変換します。私は、それがPHPで行われているかどうかはわかりませんが、MySQLi_STMTクラスは良い出発点のようになりますと

2

代わりにサブクエリのジョイン:produto FROM

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

+1:サブクエリは_baaaaaad_です –

0

SELECT *、ptamb_prod produto.refPT = pt.ref AND produto.refPT = amb_prod.idProduto AND amb_prod.idAmbiente = '"。$ ambId。"';

データに基づいて、select句でdistinctを使用する必要があります。

関連する問題