2009-07-09 3 views
0

우선, 가난한 주제 제목을 사용하십시오. 이 질문을 공식화하는 방법이나 Google에 무엇을 알릴 지 모르기 때문에 쉽게 대답 할 수 있다면 저를 쏘지 마십시오. 내가 뉴스 항목 및 출력 교신 저자를 표시하고 싶다면MySQL이 조인하는 방법, "적절한 방법으로"관계를 출력하는 방법

[저자] ID, 이름

[NEWS] ID, 항목, author_id

:

나는 다음과 같은 테이블이 있다고 가정 이

같은 것을 수행하여 출력 한 후

SELECT * FROM `news` JOIN `authors` ON news.author_id = authors.id 

그리고 : (author_id에 저장), 나는 다음과 같은 쿼리를 할 거라고

$Q = "SELECT * FROM news JOIN authors ON news.author_id=news.id"; 

$query = $this->lite->query($Q) or die($this->lite->error); 

$result=null; while($obj = $query->fetch_object()){ 
     $result.= '<li>'.$obj->item. 'by ' . $obj->name . '</li>'; 
} 

여기 $ obj-> name에는 작성자 이름이 포함되어 성공적으로 출력됩니다.

그래서 "이름"입력란이 "항목"이라고 불리는 경우 어떻게됩니까? 명백하게 충돌이있을 것입니다. Propel & 심포니에 대한 나의 이전 경험으로, 나는 getAuthorId() -> getName()과 같은 것을 할 것이지만,이 프로젝트에서는 처음부터 SQL을 작성해야한다.

+0

수업에 대한 자세한 정보를 제공 할 수 있습니까? 객체의 모든 매개 변수를 가져 오는 중입니까? – lfx

답변

6

생산 코드에서 * 구문을 사용하지 마십시오.

이 같은 조회를 다시 작성

:

SELECT news.item AS news_item, author.name AS author_name 
FROM `news` 
JOIN `authors` 
ON  news.author_id = authors.id 

이 필요로 필드 별명은 이름 충돌을 피하기 위해.

+0

많은 감사! 이것은 트릭을했다. 물론 이것은 프로덕션 코드가 아닙니다. – subZero

1

news.item 또는 authors.item과 같은 인증 된 이름을 사용해야합니다.

0

명시 적으로

SELECT n.id, n.item, n.author_id,a.name,a.id 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id 

그 이름을;

아니면 더 당신은 당신이 실제로 필요로하는 열을 뽑아해야

SELECT n.id as newsid, n.item as newsitem, n.author_id as autohor_authorid, 
a.name as authorname,a.id as authorid 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id; 

있다. select *를 수행하는 것은 좋지 않은 스타일로 간주됩니다. 관심있는 열의 이름을 지정하거나, 예를 들어 코드가 깨지기 쉽습니다. 다른 열이 테이블에 추가됩니다.