2010-02-17 16 views
14

mam wyboru rekordów z bazy danych przy użyciu równowartość tej kwerendy:Zend DB fetchAll(): gdzie macierz klauzuli z operatorem IN

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

funkcji wywołującej fetchAll() ma argument, który jest tablicą identyfikatory użytkownika, a to wywołanie działa dobrze:

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

jednak chciałbym używać tablicy dla klauzuli WHERE ponieważ tam będzie prawdopodobnie inne ograniczenia do zapytania później ... i nie mogę zorientujcie się, jak to się dzieje w moim życiu. Pomyślałem, że będzie to pewna wariacja na temat:

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

Ale do tej pory żadnych kości. Czy ktoś może podać poprawną składnię?

Odpowiedz

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

dobrze, to dla fetchAll() zamiast gdzie(), ale to jest bilet. Próbowałem wcześniej 'user_id IN (?)', Ale powiązałem go z wynikiem z implode(), a nie tylko bezpośrednio z tablicy. – Cyranix

2

w Zend 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

Mimo że ten kod może pomóc w rozwiązaniu problemu, podanie dodatkowego kontekstu dotyczącego _why_ i/lub _how_ it odpowiada na , to mogłoby znacznie poprawić jego wartość długoterminową. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie, w tym, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy