2017-02-10 14 views
0

의 각 키에 LIKE 사용하는, 그래서 여기가 SQL에 WHERE :젠드 Select 포함>, 나는 영어에 넣고하는 방법을 잘 모르겠어요 배열

SELECT "track_sub_genre".* FROM "track_sub_genre" 
WHERE "track_sub_genre"."name" LIKE '%rock punk%' 
OR ("track_sub_genre"."name" LIKE '%rock%' AND "track_sub_genre"."name" LIKE '%punk%') 

는 SQL은 위의 코드에 의해 생성되고, 그러나 나는 아래에서 설명 할 문제가있다.

$keywords = 'rock punk'; 
$key_arr = explode(' ' , $keywords); 

if(count($key_arr) > 1) { 

    $select->where(new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$keywords.'%')); 
    $select->where(
     new \Zend\Db\Sql\Predicate\PredicateSet(
      array(
       new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$key_arr[0].'%'), 
       new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$key_arr[1].'%'), 
      ), 
      \Zend\Db\Sql\Predicate\PredicateSet::OP_AND 
     ), 
     \Zend\Db\Sql\Predicate\PredicateSet::OP_OR 
    ); 

} else { 
    // Do not worry about this case 
} 

문제는 내가, 내가 $key_arr에서해야합니다 얼마나 많은 단어를 알고 않을거야 때문에 나는이 SQL을 생성 할 동적 코드를 필요 물론이다.

나는 이것이 어떻게 행해졌는지 정말 궁금합니다. 미리 감사드립니다.

답변

1

난 당신이 이해하는 경우 : 필요한 객체의 배열을 확인하고 쿼리

$key_arr = explode(' ' , $keywords); 
$insert_arr = []; 
foreach ($key_arr as $value) { 

    $insert_arr[] = new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$value.'%') 
} 

에 그렇게 간단 맞아 쿼리

$select->where(
     new \Zend\Db\Sql\Predicate\PredicateSet(
      $insert_arr, 
      \Zend\Db\Sql\Predicate\PredicateSet::OP_AND 
     ), 
     \Zend\Db\Sql\Predicate\PredicateSet::OP_OR 
    ); 
+0

이 배열을 전달하고 나는 그것을 보지 않았다 . 고맙습니다! –