2010-06-21 4 views
1

Zend_db_select와 JOIN을 사용하여 쿼리를 작성하고 싶습니다. 다음 데이터베이스는 다음SELECT with JOIN

[AUTHOR 테이블] PK 'ID' ATTR '이름'

[BOOK 테이블] PK 'ID' ATTR '이름' FK ' author.id '

매개 변수로 author.name이 있습니다. 관련된 모든 서적을 검색하고 싶습니다 (다른 열이 아닌 book.name 만 가능)

도와주세요. 감사합니다 당신이 정말로 Zend_Db_Select를 사용해야하는 경우, 당신은이 작업을 수행 할 수

답변

4

는 :

$select = $db->select() 
    ->from(array("a"=>"AUTHOR"), array("author_name"=>"name")) 
    ->join(array("b"=>"BOOK"), "a.id = b.`author.id`", array("book_name"=>"name")) 
    ->where("a.name = ?", $authorName); 

$stmt = $select->query(); 

그러나, 이것은 보통의주의와 함께 제공 : 모든 쿼리 Zend_Db_Select를 사용 할 필요가 없습니다. Zend_Db_Select는 응용 프로그램 조건에 따라 동적으로 쿼리를 작성해야하는 경우에 가장 적합합니다. 이 경우 Zend_Db_Select를 사용할 이유가 없습니다. Zend_Db_Select은 단지를 얻을 수없는 보안이나 성능면에서 아무것도 제공하지 않습니다 당신의 코멘트를 다시

$sql = " 
    SELECT a.name AS author_name, b.name AS book_name 
    FROM AUTHOR AS a JOIN BOOK AS b ON a.id = b.`author.id` 
    WHERE a.name = ?"; 
$books = $db->fetchAll($sql, $authorName); 

:

그래서 난 그냥 리터럴 SQL을 사용하여 더 분명하게 이런 짓을 했을까 다른 방법으로 쉽게. Zend_Db_Select를 사용하든 SQL에 하나의 리터럴 문자열을 사용하든 결과는 SQL 쿼리로 계속 준비하는 문자열과 같습니다. 데이터베이스는 당신이 그 문자열을 만든 다른 방법에 대해 전혀 모른다.

응용 프로그램에서는 응용 프로그램 논리에 따라 조건부로 SQL 쿼리에 열, 테이블 또는 식을 추가하는 것이 일반적입니다. 이 시나리오에서는 SQL 쿼리에 절을 추가하는 데 도움이되는 Zend_Db_Select와 같은 클래스를 갖는 것이 편리합니다.

이 아니지만에 동적 절이 필요하지 않은 쿼리는 두 번째 예와 같이 하나의 문자열 리터럴로 SQL 쿼리를 표현하기가 쉽고 디버그가 쉬우 며 유지 관리가 쉽습니다. 위.

보안을 위해 작성자 이름에 매개 변수 자리 표시자를 사용하고 쿼리를 준비한 후에 해당 값을 인수로 제공 할 수 있습니다. Zend_Db_Select를 사용하는 것처럼 리터럴 SQL 쿼리를 사용하면 쉽게이 작업을 수행 할 수 있습니다.

+0

고마워요. 나는 원래 질문의 범위를 벗어날 것이라는 것을 알고 있지만 Zend_Db_Select를 사용하는 것이 왜 필요하지 않은지 간단히 설명 할 수는 없습니까? 일반적으로 그렇게하는 데 이점 (성능 또는 보안 현명)이 없습니까? – Max

+0

자신감있는 대답처럼 들립니다. 내가 할게요. 다시 한번 감사드립니다. 내가 말할 수있는 "좋은 닫으십시오". – Max