2013-04-01 3 views
0

누군가가 공통 ID를 가진 두 테이블에서 데이터를 가져 오는 가장 효율적인 방법을 찾도록 도와 줄 수 있는지 궁금합니다.가장 효율적인 MySQL 쿼리를 만드는 방법

간단한 예제는 두 개의 테이블이 있다는 것입니다. 고객과 다음과 같은 필드가 메시지 :

고객 - 아이디, 이름, 성

메시지 - CUSTOMER_ID, 메시지

고객 테이블은 하나를 가지고 것을 관계는 고유 ID가있는 항목이지만 메시지 테이블에는 각 고객에 대해 여러 개의 메시지가있을 수 있습니다.

PHP 페이지에서 고객 이름을 페이지 상단에 표시하고 해당 고객에 대한 모든 메시지를 표시하려고합니다. 다음과 같이 순간

, 나는 두 개의 쿼리를 사용하고 있습니다 :

$q1 = mysql_query("SELECT * FROM customers WHERE id='123'"); 
while($row1= mysql_fetch_assoc($q1)){ 
    echo "$row1[firstname] $row1[surname]"; 
} 

$q2 = mysql_query("SELECT * FROM messages WHERE customer_id='123'"); 
while($row2= mysql_fetch_assoc($q2)){ 
    echo "$row2[message]"; 
} 

이것은 내가 하나이 작업을 수행 할 수있는 방법이 있는지 내가 달성하기 위해 노력하고 있지만 궁금 있었는지의 단순화 된 버전 질문. 여기에서 검색 할 때 JOIN 및 UNION 함수를 본 적이 있지만 이들을 사용하지는 못했지만 이들이 어떻게 모든 메시지와 함께 한 번만 고객 이름을 표시 할 수 있는지를 볼 수 없습니다. 이러한 질문이 하나의 쿼리에서오고 10 개의 메시지가있는 경우 고객 이름은 10 번 반복됩니다. 내가 거기에 모든 감각을 만든 적이 있지만 어떤 도움을 주시면 감사하겠습니다 :)

+2

** [사용하지 마십시오 mysql_로에 적절한 인덱스가 있는지 확인 * 새로운 코드의 기능은 더 이상 사용되지 않으며 SQL 인젝션과 같은 것에 취약한 코드를 생성하는 것을 훨씬 쉽게 만듭니다. 대신 PDO 같은 데이터베이스 추상화 레이어를 사용해보십시오] (** http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – zajd

답변

1

를 확인하는 것이

확실하지 당신이 두 테이블

SELECT customers.name, 
     messages.* 
    FROM customers 
    LEFT JOIN messages 
     ON messages.customer_id = customers.id 
WHERE customers.id = 123 
+0

감사 표시! 어떻게하면 PHP에서 이것을 반향시킬 수 있을까요? $ row [ 'messages.message']일까요? – mckeegan375

+0

$ row [ 'message'] –

+0

많은 감사를드립니다! – mckeegan375

관련 문제