2009-04-21 5 views
1

어떻게이 두 쿼리를 하나로 만들 수 있습니까?어떻게 한 번에 두 개의 쿼리를 만들 수 있습니까?

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

, 하지만 조인 (join)이 잘 작동 할 수도 있습니다.

+0

주제는 조금 있지만 SQL 명령을 연결하지는 않지만 가능한 경우 매개 변수가있는 쿼리를 사용하십시오 (이 코드는 잠재적으로 SQL 주입의 대상이됩니다). – Lucero

+0

더 큰 테이블에서이 작업이 느려지면 내 결합 솔루션을 chech하십시오 –

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, 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 *, pt, amb_prod produto.refPT = pt.ref AND produto.refPT = amb_prod.idProduto AND amb_prod.idAmbiente = ' ". $ ambId."';

데이터를 기반으로 select 절에 distinct를 사용해야 할 수도 있습니다.

관련 문제