db_select ()를 사용하여 두 테이블에서 필드를 선택하십시오.


15

사용 db_select()중이며 fields()메소드 의 구문을 이해하지 못합니다 . join()다른 테이블을 조인하기 위해 a 를 사용하고 있습니다. 그래서 테이블의 경우 tn같은 것을하고 싶습니다.

SELECT t.tid, t.field1, t.field2, n.title, n.author 
FROM table t INNER JOIN node n ON t.nid = n.nid;

나는 가지고있다

$results = db_select('table', 't')
  ->fields( ... )
  ->join('node', 'n', 'n.nid = t.nid')
  ->execute();

그러나 당신이 볼 수 있듯이, 나는에서 길을 잃었다 fields(). 내가 본 예제는 하나의 테이블에 대해서만 필드를 지정합니다.

->fields('t', array('tid', 'field1', 'field2'))

사용하고 싶은 구문은 무엇입니까?

답변:


28

간단히, fields ()를 두 번 호출하십시오.

$query = db_select('table', 't');
$query->join('node', 'n', 'n.nid = t.nid');
$result = $query
  ->fields('t', array('tid', 'field1', 'field2'))
  ->fields('n', array('nid', 'field1', 'field2'))
  ->execute();

foreach ($result as $row) {
  // Do something with $row.
}

대부분의 메소드를 여러 번 호출 할 수 있습니다 (여러 필드, 여러 조건, 여러 정렬 순서, 여러 조인 등).

내 예제에서 볼 수 있듯이 join ()에 대한 호출은 분리해야하며 "체인"(행에 여러 개의 메소드 호출을 갖는 기술적 용어 임) 일 수 없습니다. 쿼리 객체는 반환하지 않지만 테이블 별칭의 이름입니다.


2

화려한 작업을 수행하지 않으면 암시 적 조인은 여전히 ​​db_query ()와 함께 작동합니다. 이것이 나쁜 습관인지 확실하지 않습니다. 나는 IRC에서 한 번 물었고 아무도 답을 얻지 못했습니다. 따라서 D6에서 남은 것이 있으면 작동합니다.


3
db_select ()를 사용해야하는 명시적인 이유가없는 한 db_query ()를 사용하는 것이 좋습니다 (실제로 성능상의 이유로 권장 됨). 여기에 그 이유를 설명했습니다 : drupal.stackexchange.com/questions/1200/…
Berdir

큰! 나는 어쨌든 내 게으름을 너무 게으르다. ;)
colan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.