2014-11-25 6 views
0

나는 계층에서 검색을 수행하는 복잡한 검색 알고리즘을 작성하고 있습니다. 그리고 두 계층의 경우 젠드의 SQL 빌더가 처리 할 수없는 매우 이상한 순서 절이 필요합니다. 젠드에게 명령을 해석하고 파멸시키지 않고 문자열을 order by 절에 추가하도록 지시하는 방법이 있습니까? 에 의해, 내 순서의 예를 생각해 것과Zend sql의 order 함수에 문자열을 전달할 수 있습니까?

IF(Name LIKE '1234 %' OR Name LIKE '% 1234 %' OR Name LIKE '% 1234' OR Code LIKE '1234 %' OR Code LIKE '% 1234 %' OR Code LIKE '% 1234', 1, 0) + IF(Name LIKE 'ASF %' OR Name LIKE '% ASF %' OR Name LIKE '% ASF' OR Code LIKE 'ASF %' OR Code LIKE '% ASF %' OR Code LIKE '% ASF', 1, 0)

는 기본적으로 현재 레코드가에 의해 포함하고 주문 검색 문자열에서 단어의 수를 계산합니다.

은 내가 order by 조항의 인수는 일반 문자열 인 경우이

$sql = new Sql($this->adapter); 
$select = $sql->select(); 
$select->from('Table'); 
$select->where($where); 
$select->order($orderString); 

답변

0

같은 것을하고 싶은, 그래서 따라야 여부를 "ASC"나에 의해 ( 처럼 열 이름 간주됩니다 "DESC").

가능한 해결 방법은 Expression 클래스를 사용하는 것입니다. 다음과 같이 입력하십시오 :

$select->order(array(new \Zend\Db\Sql\Expression($orderString))); 

희망이 있습니다.