2010-02-17 3 views
14

я выбор записей из базы данных, используя эквивалент этого запроса:Zend DB fetchAll(): где положение массив с оператором IN

SELECT * FROM reports WHERE user_id IN (3, 6, 22); 

Функция вызова fetchAll() имеет аргумент, что это массив идентификаторы пользователей, и этот вызов работает просто отлично:

$resultSet = $this->getDbTable()->fetchAll('user_id IN (' . implode(', ', $userIds) . ')'); 

Однако, я хотели бы использовать массив для ИНЕК, потому что, вероятно, будут и другие ограничения на запрос позже ... и я не могу Подумайте об этом. Я думал, что это будет какая-то вариация на следующее:

$resultSet = $this->getDbTable()->fetchAll(array('user_id IN ?' => '(' . implode(', ', $userIds) . ')')); 

Но до сих пор нет кубиков. Может ли кто-нибудь предоставить правильный синтаксис здесь?

ответ

21
$data = array(1, 2, 3); 
$select->where('user_id IN (?)', $data); 
+0

Ну, это для fetchAll() вместо того, где(), но это билет. Я попробовал «user_id IN (?)» Раньше, но связал его с результатом от implode(), а не только от массива напрямую. – Cyranix

2

В Зенд 2

$data = array(1, 2, 3); 
$select->where('user_id', $data); 
0
$select = $this->getSql()->select(); 
$select->where("reports.user_id in ('3','6','22')"); 
$resultSet = $this->selectWith($select);    
//echo $select->getSqlString();die; 
return $resultSet; 
+0

Хотя этот код может помочь решить проблему, предоставив дополнительный контекст относительно _why_ и/или _how_ ответа , этот вопрос значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснения, включая то, что применяются ограничения и допущения . –