2010-02-25 3 views
1

와 나는 다음과 같은 구조를 사용하는 SELECT 문을 만들려고하고 있습니다. ..SELECT '0'변수 AS ... Zend_Db_Select

SELECT '0' AS provisionalQty, 'ballast' AS productType, i.* FROM ... LEFT JOIN ... WHERE ...; 

그러나 예상대로 작동하지 않습니다. $ db-> columns() 메소드는 'pseudo-columns'조차도 각 컬럼에 테이블이 첨부 될 것으로 기대한다. 어떤 아이디어?

-Chris

+1

저는 젠드 전문가가 아니며 최근에야 놀았습니다. Zend의 순수 주의자들은 나를 (그리고 아마도 좋은 이유를 가지고) 쏘지 않을 것이지만, 쿼리를 표현하는 순수한 SQL은 Zend 형식의 equivelent보다 작고 (그리고 더 단순 해 보인다) 쿼리를 원시 SQL로 유지하는 것을 좋아한다. 아마도 Xend DB 코드보다 복잡한 SQL에서 X 년 동안 더 많은 경험을했기 때문일 수도 있습니다. –

+0

@Peter M : 나는 당신과 동의합니다! 나는 종종 Zend_Db_Select를 사용하기 위해 * 필요하지 않다는 것을 사람들에게 조언한다. 리터럴 SQL을 작성하는 것이 더 쉽고 명확 할 때 거의 이점이 없습니다. 나는 ZF 프로젝트를 작업 할 때 Zend_Db_Select의 코드를 작업했으며, Zend_Db_Select를 사용하는 것은 필수가 아니라는 것을 설명하는 문서에 노트를 썼다. –

+0

Zend_Db_Select의 이점은 조건부로 쿼리에 절을 추가하는 응용 프로그램 논리를 사용하는 경우입니다. 이는 동적으로 쿼리를 작성할 때 올바른 SQL 구문을 보장하는 데 도움이되는 방법입니다. 그러나 "빌드"할 필요가없는 완전한 SQL 쿼리를 작성할 때 PHP로 된 문서에 넣습니다. –

답변

1

이 클래스의 작동 방식 때문에 문자열/배열을 사용하면 특정 테이블을 찾는 반면 Zend_Db_Expr 클래스는 실제 테이블을 필요로하지 않는 것으로 보입니다.

+1

다음과 같이 할 수도 있습니다 : -> columns (array ('provisionalQty'=> 새로운 Zend_Db_Expr ('0'), 'productType'=> 'ballast'))); –

0

여기서는 잘못 선택한 열을 사용한다고 생각합니다.

// "ballast AS productType, 0 as provisionalQty" 
$db->columns(array("productType" => "ballast", "provisionalQty" => 0)); 

그냥 추상화 문 AS 정상의 역이며 포함 할 필요가 없습니다 열을 기억 : 그것은 무언가 같이해야한다 "있는 그대로."

+0

응답 해 주셔서 감사합니다. 다행히도, 나는 이것을 할 방법을 알아 냈습니다! –

+0

아, 죄송합니다. 배열에 있어야합니다. 그것이 구문입니다. "Expression Column 추가"매뉴얼 확인 http://framework.zend.com/manual/en/zend.db.select.html – typeoneerror

+0

Zend_Db_Select의 구문을 이해했습니다. 어떤 테이블에도 포함되지 않습니다. Zend_Db는 접두어로 테이블 이름을 from() 및 columns() 메소드 내의 값에 기본적으로 첨부합니다. 그것은 어디에 문제가 있었는지 ... Zend_Db_Expr은 테이블 이름을 첨부하지 않고 명령문을 사용할 수있게합니다. Zend_Db_Expr이 갈 길인 것 같습니다. –