2010-03-26 6 views
2

두 개의 테이블이 있습니다.MySQL LEFT JOIN 쿼리에서 두 개의 동일한 이름의 열에 어떻게 액세스 할 수 있습니까?

table_x :

id INT(11) 
tag INT(11) 

table_tags :

SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id 

유일한 문제는 다음과 같습니다 :

id INT(11) 
name VARCHAR(255) 

그런 다음 나는 다음과 같은 쿼리를 수행하기 위해 PHP를 사용하는 방법 내가 table_x.id에 액세스 할을하고 검색 결과에 table_tags.id?

$query = "SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id"; 
$results = mysql_query($query); 

while($row = mysql_fetch_array($results)) 
{ 
    // how do I now access table_x.id and table_tags.id ??? 
} 
+0

그것은 당신이 경우 어렵지 않다 {

**//fetch id of table_x with xid** **echo "table_x id: ".$row['xid'];** 

는 TID

**echo "table_tags id: ".$row['tid'];** 

와 table_tags의 ID를 가져 //} *를 선택하지 말고 열 단위로 선택하십시오. 선택없이 * 할 수있는 방법을 찾고 있습니까? – stevedbrown

+0

가능하면 불가능합니다. '*'가 필요합니다. 물론, 다른 방법이 없다면, 나는 그것을 떨어 뜨릴 것이다. –

답변

4

당신은 당신의 열 목록에서 열 이름 : 여기

은 PHP 코드입니다 일반적으로

SELECT 
    table_x.id AS x_id, 
    table_tags.id AS tag_id, 
    other, columns, here 
FROM table_x LEFT JOIN table_tags 
ON table_x.tag = table_tags.id 

을, 그것은 당신이 반환 할 열 이름을 명시 적으로보다는 좋은 형태로 간주 *에 의존 (기본 테이블 구조가 변경 될 경우 실제 숫자, 순서 및 열 이름이 변경 될 수 있음). 동시에 사용하기 쉽도록 결과 세트에 새 이름으로 열을 별명 지정할 수 있습니다 (AS 키워드는 대부분의 SQL 언어에서 선택 사항 임).

업데이트 : OP는 "*"을 사용해야한다는 의견에 명시되어 있습니다. 권장 사항은 아니지만 다음과 같이 할 수 있습니다. 원하는 이름이 지정된 열과 (나쁜) "*"기술을 결합한 제품입니다. 귀하의 컬럼은 결과 세트에 두 번, 처음 두 컬럼 위치 및 컬럼 목록의 정규 위치에 포함됩니다. 값은 동일합니다.

+0

다른 방법이 있습니까? 내 쿼리에'*'를 써야합니다. –

+0

+1 너는 나에게 래터를 때려. – jps

+1

너는 *을 사용해서는 안된다. 그러나 필요한 경우, 각 행의 데이터에 정수 인덱스를 사용하여 열 값을 가져올 수 있어야합니다. 물론 열 번호와 순서에 완전히 의존하게 될 것이고 앞으로 코드가 중단 될 것입니다.결과 데이터 세트에서 리턴 된 C 럼 이름리스트를 반복 할 수도 있지만 그 정보에 소스 테이블의 이름이 들어 있는지는 알 수 없습니다. –

1

는 "table_x.tag = table_tags.id ON table_tags 가입 table_x의 왼쪽에서 TID AS XID AS (table_x.id), (table_tags.id)을 선택"=이

$ 쿼리처럼 사용;

$ 결과 = mysql_query ($ query);

동안 ($ 행 =로 MYSQL_ASSOC ($ 결과))

관련 문제