2011-05-01 3 views
0

다소 복잡한 쿼리가 있으며 단계별로 Zend_Db_Select를 사용하여 빌드 할 수 있습니다. 쿼리 모습이 추천했습니다 :Zend_Db_Select를 사용하여 조인을 사용하여 쿼리의 열 순서를 변경하는 방법

SELECT `subscribers`.`subscriber_id`, `subscribers`.`email_address`, `subscribers`.`first_name`, 
`subscribers`.`last_name`, `t1`.`value` AS `'SingleLineField'`, `t2`.`value` AS `'MultilineField'`, 
`t3`.`value` AS `'CheckboxField'` 
FROM `subscribers` 
INNER JOIN (SELECT subscriber_id 
      FROM subscribers 
      WHERE list_id =68 AND state=1 
      LIMIT 0, 25) AS `s` ON subscribers.subscriber_id = s.subscriber_id 
LEFT JOIN `subscribers_custom_data_string` AS `t1` ON subscribers.subscriber_id=t1.subscriber_id AND t1.field_id=177 
LEFT JOIN `subscribers_custom_data_string` AS `t2` ON subscribers.subscriber_id=t2.subscriber_id AND t2.field_id=178 
LEFT JOIN (SELECT subscribers_multivalued.subscriber_id, field_id, GROUP_CONCAT(value SEPARATOR ',') AS value 
      FROM subscribers_multivalued 
      INNER JOIN (SELECT subscriber_id 
         FROM subscribers 
         WHERE list_id =68 AND state=1 
         LIMIT 0, 25) AS s1 ON subscribers_multivalued.subscriber_id=s1.subscriber_id 
      WHERE field_id=179 
      GROUP BY subscribers_multivalued.subscriber_id, field_id) AS `t3` ON subscribers.subscriber_id=t3.subscriber_id AND t3.field_id=179 

을하지만 지금은 동적으로 수 같은 것으로 상기 쿼리를 변환 할, 열 순서를 변경 할 수 있어야합니다 :

SELECT `subscribers`.`subscriber_id`, `subscribers`.`email_address` , `t1`.`value` AS `'SingleLineField'`, `t2`.`value` AS `'MultilineField'`, 
`t3`.`value` AS `'CheckboxField'`, `subscribers`.`first_name`, 
`subscribers`.`last_name` 
FROM `subscribers` 
INNER JOIN (SELECT subscriber_id 
      FROM subscribers 
      WHERE list_id =68 AND state=1 
      LIMIT 0, 25) AS `s` ON subscribers.subscriber_id = s.subscriber_id 
LEFT JOIN `subscribers_custom_data_string` AS `t1` ON subscribers.subscriber_id=t1.subscriber_id AND t1.field_id=177 
LEFT JOIN `subscribers_custom_data_string` AS `t2` ON subscribers.subscriber_id=t2.subscriber_id AND t2.field_id=178 
LEFT JOIN (SELECT subscribers_multivalued.subscriber_id, field_id, GROUP_CONCAT(value SEPARATOR ',') AS value 
      FROM subscribers_multivalued 
      INNER JOIN (SELECT subscriber_id 
         FROM subscribers 
         WHERE list_id =68 AND state=1 
         LIMIT 0, 25) AS s1 ON subscribers_multivalued.subscriber_id=s1.subscriber_id 
      WHERE field_id=179 
      GROUP BY subscribers_multivalued.subscriber_id, field_id) AS `t3` ON subscribers.subscriber_id=t3.subscriber_id AND t3.field_id=179       

또는 예를 들어

, 뭔가 하나 같이 :

SELECT `subscribers`.`subscriber_id`, `t1`.`value` AS `'SingleLineField'`, `t2`.`value` AS `'MultilineField'`, 
`t3`.`value` AS `'CheckboxField'`, `subscribers`.`email_address`, `subscribers`.`first_name`, 
`subscribers`.`last_name` 
FROM `subscribers` 
INNER JOIN (SELECT subscriber_id 
      FROM subscribers 
      WHERE list_id =68 AND state=1 
      LIMIT 0, 25) AS `s` ON subscribers.subscriber_id = s.subscriber_id 
LEFT JOIN `subscribers_custom_data_string` AS `t1` ON subscribers.subscriber_id=t1.subscriber_id AND t1.field_id=177 
LEFT JOIN `subscribers_custom_data_string` AS `t2` ON subscribers.subscriber_id=t2.subscriber_id AND t2.field_id=178 
LEFT JOIN (SELECT subscribers_multivalued.subscriber_id, field_id, GROUP_CONCAT(value SEPARATOR ',') AS value 
      FROM subscribers_multivalued 
      INNER JOIN (SELECT subscriber_id 
         FROM subscribers 
         WHERE list_id =68 AND state=1 
         LIMIT 0, 25) AS s1 ON subscribers_multivalued.subscriber_id=s1.subscriber_id 
      WHERE field_id=179 
      GROUP BY subscribers_multivalued.subscriber_id, field_id) AS `t3` ON subscribers.subscriber_id=t3.subscriber_id AND t3.field_id=179     

문제는 내가 Zend_Db_Select 여러 번에서 방법을 사용할 수 없습니다 (이 새로운 생성 내가 원하는하지 않은이 경우 참여합니다)를 orde를 변경하는 것입니다 r의 전자 메일, 이름 및 성 필드를 포함합니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

+0

페이징 인이 필요하기 때문에 Zend_Db_Select가 필요합니다. – Oleg

+0

질의 2 또는 3처럼 간헐적 인 열 (메인 테이블과 조인 테이블에서)을 사용하여 Zend_Db_Select를 만드는 방법을 지금 볼 수 없습니다. – Oleg

+0

이 질문에 대한 답을 찾을 수 없습니다. – Oleg

답변

2

->columns() 메서드를 사용하여 원하는 열을 선택할 수 있습니다. from 메소드에서 빈 배열을 사용한 다음, 큰 Zend_Db_Expr 내부에서도 columns() 호출을 사용합니다. 여기서는 선택 인수를 원하는 방식으로 작성하고 원하는 순서로 작성할 수 있습니다.

+0

고맙습니다. 작동하는 것처럼 보이고 여러 번 열을 사용할 수 있습니다. – Oleg

관련 문제