2012-12-24 2 views
-2

테이블이 3 개 있고 선택 결과를 쓰고 싶지만 '내부' '외부'등을 사용하는 방법을 모르겠지만 누군가 도움을 주시면 감사하겠습니다.여러 테이블에서 데이터 가져 오기

테이블 : 제조 업체/제품/products_description

$manufacturer_query = "SELECT manufacturers_id from manufacturers WHERE manufacturers_name='" . $m ."'"; 
$manufacturer = mysql_query($manufacturer_query); 
$mresult = mysql_fetch_array($manufacturer); 

$products_query = "SELECT p.products_id, pd.products_description FROM products p, products_description pd WHERE p.products_id=pd.products_id AND p.manufacturers_id=" . $mresult['manufacturers_id']; 
$products = mysql_query($products_query); 
$presult = mysql_fetch_array($products); 


$c = 0;        
while ($presult){ 
$c++; 
echo $c . ' - ' . $prod['p.products_id'] . ' - '.$prod['pd.products_description'].' - ' . $mresult['manufacturers_id'] . '<br>'; 
} 
+1

[** 새 코드 **에서 mysql_ * 함수를 사용하지 마십시오 (http://bit.ly/phpmsql). 더 이상 유지 관리되지 않으며 공식적으로 사용되지 않습니다 (https://wiki.php.net/rfc/mysql_deprecation). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). – Neal

+0

http://www.sitepoint.com/understanding-sql-joins-mysql-database/ – DWright

+1

에서 테이블 구조를 설명하고 찾고있는 쿼리 결과가 무엇인지 크게 설명하면 도움이 될 것입니다. –

답변

0

가입 INNER 당신을이 시도 조인해라.

두 테이블 이름 (products 및 products_description) 사이의 쉼표는 조인 연산자입니다.

이것은 다시 쓸 수 있으며 쉼표 결합 연산자를 JOIN 키워드로 바꾸고 join 술어를 ON 절로 재배치합니다. 이 (적어도 하나)의 행가 일치 products 테이블에 존재 한정해 p.manufacturers_id = 1의 행이 반환 될 것을 조인 "내부"인

SELECT p.products_id 
    , pd.products_description 
    FROM products p 
    JOIN products_description pd 
    ON pd.products_id=p.products_id 
    AND p.manufacturers_id = 1 

적어도 하나의 행을 또한인지 products 테이블에서 리턴 된 행 (들)과 일치하는 값이 products_id 인 products_description 테이블.

JOIN 키워드 앞에 키워드 INNER을 추가해도 내용이 변경되지는 않습니다.

을 감안할 때 이러한 테이블 내용 :

TABLE: products 
manufacturers_id products_id 
1     222 
1     333 
1     444 

TABLE: products_description 
products_id products_description 
222   foo  
444   fee 
444   fi 
444   fo 
444   fum 

는 그 쿼리가 반환 : 당신이 JOIN 키워드 앞에 LEFT 키워드를 추가하는 경우

p.products_id pd.products_description 
222   foo  
444   fee 
444   fi 
444   fo 
444   fum 

은, 다음 쿼리는 OUTER 것 가입하고, 검색어는 다음과 같은 행을 반환합니다.

p.products_id pd.products_description 
333   (NULL) 

여기서 JOIN의 왼쪽 테이블의 행에는 오른쪽 테이블에서 일치하는 행이 없습니다. 특정 순서로 반환 된 행을 원하는 경우

은, 다음 쿼리의 끝에서 ORDER BY 절, 예를 들어이 포함

ORDER BY p.products_id, pd.product_description 

MySQL은 임의의 행을 반환 자유롭게 결석 한 것을 주문.


키워드 INNEROUTER 완전히 선택 사항입니다. 명령문 처리 방법에는 아무런 영향을주지 않으므로 대부분의 SQL 개발자가 이러한 키워드를 생략합니다.

LEFT JOINOUTER입니다. 오른쪽 테이블에 일치하는 행이없는 경우에도 왼쪽의 테이블에서 행이 반환됩니다.

은 (크로스 조인을 위해, 우리는 일반적으로 그것이 온 조항의 누락이 의도적 문서의 역할을해서, 아무런 효과가 없습니다에도 CROSS 키워드를 포함 않습니다.)


루프이어야는 mysql_fetch_array 호출

$products = mysql_query($products_query); 
$c = 0; 
while ($prod = mysql_fetch_array($products)) { 
    $c++; 
    echo $c . ' - ' . $prod['products_id'] . ' - '.$prod['products_description'].' - ' . $mresult['manufacturers_id'] . '<br>'; 
} 

mysql_로 인터페이스가 지원되지 않습니다. 새로운 개발은 mysqli_ 또는 PDO 인터페이스를 사용해야한다.

+0

잘 설명되었지만 여전히 작동하지 않습니다. 몇 줄을 수정하려했지만 아무 일도 없었습니다. 'p.product_id'및 'pd.products_description'은 0을 반환하고 'while'은 무한 루프에 들어갑니다. –

+0

while 루프 안에서 mysql_fetch_array 호출을 이동하면 "무한 루프"문제가 해결됩니다. 나는 이것을 포함하도록 내 대답을 편집했다. 당신은 당신이 당신의 코멘트를 게시했을 때 그것을 보아서는 안된다. – spencer7593

+0

실제로 무한 루프가 없습니다 (예, 수정했습니다). p.products_id 및 pd.products_description이 표시되지 않습니다. –

0

이미 두 번째 쿼리의 ($products_query를)

$manufacturer_query = "SELECT m.manufacturers_id , p.products_id, pd.products_description FROM manufacturers m 
         INNER JOIN products p ON p.manufacturers_id= m.manufacturers_id 
         INNER JOIN products_description pd ON p.products_id=pd.products_id 
         WHERE manufacturers_name='" . $m ."'"; 



$products = mysql_query($manufacturer_query); 
$presult = mysql_fetch_array($products); 


$c = 0;        
while ($presult){ 
$c++; 
echo $c . ' - ' . $prod['p.products_id'] . ' - '.$prod['pd.products_description'].' - ' . $mresult['manufacturers_id'] . '<br>'; 
} 

편집

$manufacturer_query = "SELECT m.manufacturers_id mm, p.products_id pp, pd.products_description ppd FROM manufacturers m INNER JOIN 
       products p ON p.manufacturers_id= m.manufacturers_id INNER JOIN 
       products_description pd ON p.products_id=pd.products_id WHERE manufacturers_name='" . $m ."'"; 



    $products = mysql_query($manufacturer_query); 



    $c = 0;        
    while ($presult = mysql_fetch_array($products)){ 
$c++; 
    echo $c . ' - ' . $presult['pp'] . ' - '.$presult['ppd'].' - ' . $presult['mm'] . '<br>'; 
    } 
+0

작동하지 않습니다. 나는 질의 끝에 m.manufacturers_name을 넣으려고했지만 $ prod를 $ presult로 변경했지만 여전히 작동하지는 않았다. –

+0

죄송합니다. 오류가 발생했습니다. 내 편집을 시도하십시오. –

관련 문제