Как создать предложение WHERE IN с помощью Zend_Db_Select

Итак, я пытаюсь добиться чего-то вроде этого:

SELECT * FROM table WHERE status_id IN (1,3,4);

используя Zend_Db_Select ... не могу найти, как это сделать :( Это вообще возможно?


person xelurg    schedule 04.12.2008    source источник


Ответы (4)


вы также можете использовать это так:

$data = array(1,3,4);
$select->where('status_id IN(?)', $data);

Вам не нужно взрывать массив, и это безопаснее

person Martin Rázus    schedule 12.12.2008
comment
Погуглил эту проблему и нашел ваше решение - потом понял, что уже однажды проголосовал за него. Так что, поскольку я не могу проголосовать за вас снова, примите этот комментарий как знак признательности! - person leek; 15.04.2010
comment
Так много вариантов параметризации IN, спасибо, что сэкономили мне вечер использования Google Glopping! - person Alan Storm; 15.10.2010
comment
Мартин, я пробовал использовать implode, но увидел, что цитируется вся строка. спасибо за простое решение. Работает как шарм! - person Matthew Setter; 11.09.2011
comment
Это решение работает для ZF1, но не для ZF2, см. Мой другой ответ. - person klodoma; 27.09.2014
comment
Не работает у меня после взрыва массива. используя zf2 - person vidur punj; 02.04.2018

Первый ответ, вероятно, работает в ZF1, но не работает в Zend Framework 2:

$data = array(1,3,4);
$select->where('status_id IN(?)', $data);

В случае с Zend Framework2 я обнаружил, что вам нужно использовать:

$data = array(1,3,4);
$select->where(array('status_id' => $data));

Результат:

WHERE `status_id` IN ('1', '3', '4')

Я нигде не мог найти это задокументировано! Документация ZF обычно не оптимальна.

person klodoma    schedule 27.09.2014
comment
Да, я могу подтвердить, что первый ответ: $ select- ›where ('status_id IN (?)', $ Data); действительно работает в ZF1 - person Vlado; 27.03.2017

видимо это супер просто ... тупой я:

$select->where('status_id IN(1,3,4)');

:(

person xelurg    schedule 04.12.2008

Мы можем использовать Zend\Db\Sql\Predicate\In с Zend\Db\Sql\Where, чтобы сделать запрос где в внутри модели.

$this->status_ids = array(1,3,4);

// select attributes from db by where in 
$result = $this->select(function (Select $select) {
   $predicate = new In();
   $select->where(
      $predicate->setValueSet($this->status_ids)
                ->setIdentifier('status_id')
      );
})->toArray();
person Malay M    schedule 19.02.2017