2012-03-19 3 views
-1

2 개의 테이블이 있습니다. 각 테이블의 고유 ID는 두 테이블에서 동일합니다. php에서 두 테이블의 데이터를 함께 결합하는 방법은 무엇입니까? 나는 일반적으로 데이터를 가져 오는 경우MySQL에서 PHP의 내부 조인을 사용합니다.

나는이처럼 수행은 모든 혼합 점점 별도의 테이블에서 데이터를 끌어와하지에 관해서는

$get_board_array = mysql_query("SELECT * FROM posts WHERE user_id_to = '$id' "); 
     while($posts = mysql_fetch_array($get_board_array)) 
     { 
      $post_id = $get_post['post_id']; 
      $html_output .= "<p>".$post_id."</p>"; 
     } 

, 나는이 같은 일을 생각하고 있었는데

:

$get_arrayA = mysql_query("SELECT * FROM tableA WHERE age = '36' "); 
    while($dataA = mysql_fetch_array($get_arrayA)) 
    { 

     $dataA_id = $dataA['id']; 
     $dataA_firstName = $dataA['FirstName']; 

    foreach($dataA_id) 
    { 
     $get_arrayB = mysql_query("SELECT * FROM tableB where id='".$dataA_id."'"); 
     while($dataB = mysql_fetch_array($get_arrayB)) 
     { 

     $dataB_lastName = $dataB['LastName']; 

     $html_output .= "<p>".$dataA_firstName.$dataB_lastName"</p>"; 

     echo $html_output; 
     } 
    } 
} 

아니면 이것은 너무 이상한 일일까요?

나는 내부 조인을 사용하여 SQL 내에서이를 수행하는 방법을 알고 있지만 PHP와 출력 HTML에서이를 어떻게 수행합니까? 와일드 카드 (*) 문자를 사용 그릇된 방향으로 이끌다의 때문에

SELECT a.id,a.FirstName,b.LastName 
FROM tableA a 
JOIN tableB b ON b.id = a.id 
WHERE a.age = '36' 
+4

중첩 된 쿼리가 잘못되었습니다. 대신 [MySQL JOINs] (http://mysqljoin.com/)을보십시오. 생각해보십시오. 외부 쿼리에서 반환 된 모든 행에 대해 쿼리를 실행합니다. 'JOIN'은 단지 하나의 질의 일 뿐이지 만 이것은 엄청나게 느립니다. – Bojangles

+1

진술 :'$ dataA_id = $ dataA [ 'id'];'는 배열을 만드는 대신 변수의 값을 업데이트하는 것일뿐입니다 – hjpotter92

+2

SQL에서하는 방법을 알고 있다면 "PHP ". 당신은'*'을 선택해서는 안되며, 루프에서 질의를 중첩해서는 안됩니다. 가능한 한 많은 데이터를 앞에 당깁니다. – MetalFrog

답변

1

그것은이다

+0

'USING (foo_id)'는'ON foo.foo_id = bar.foo_id'의 줄임말입니다. –

+0

그냥 1 열만 선택할 수 있다는 것을 몰랐습니다. 나는 1 월에 PHP를 사용하여 책을 읽었는데, SELECT *를 사용하여 모든 질의에 대해 SQL에 대한 1 장을 제공하는 것과 같았습니다. 저와 제 친구들을 위해이 사이트를 만드는 것은 지난 몇 주 동안 쉬는 시간이었습니다. 나는 SQL에 대해 많은 것을 배웠습니다. 덕분에 이것에 대한 잔뜩 내 검색어를 최적화하는 데 도움이 alot! – user1053263

+1

@ user1053263, SQL에 대한 훌륭한 책이 있습니다. MySQL만을 다루는 항목을 읽은 다음 [SQL Antipatterns] (http://pragprog.com/book/bksqla/sql-antipatterns)를 얻으십시오. 고급 용도입니다. MySQL과 PHP 모두를 가르쳐 준다고 주장하는 모든 책은 "3 일 만에 배워야하는"제목이 아닙니다. –

1

이 (난 그냥 스키마 및 사용자의 요구를 추측하고있어) 상황에 더 나은 쿼리 수 있습니다. 그만 둬 !! 이것은 오만한 PHP 개발자가 SQL을 배울 필요가 없다고 생각할 때 일어납니다. 필요한 것이 있으면 선택하십시오.

SELECT 
    foo.foo_id, 
    foo.data as paramX , 
    bar.type, 
    bar.something_else 
FROM foo 
    INNER JOIN bar USING (foo_id) 
WHERE 
    foo.state = 'open' 
AND bar.type = 3 
+0

귀하의 조인 조건에 문제가 있습니다. –

+0

@ tereško는 귀하가 유용하다고 판단되는 모든 수정을 자유롭게합니다. 나는 그가 어떤 종류의 조인을 필요로하는지 모른다. 어쩌면 INNER가 더 좋을 것입니다, 예 –

+0

이긴하지만 기본 키를 모두 가지고있을 것입니다. 그가 기본 키를 가지고 있다고 가정하면 –

관련 문제