2010-02-17 14 views
14

Sto selezione di record da un database utilizzando l'equivalente di questa query:Zend DB fetchAll(): dove gamma clausola con IN operatore

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

La funzione di chiamata fetchAll() ha un argomento che è una serie di gli ID utente, e questa chiamata funziona bene:

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

Tuttavia, vorrei utilizzare un array per la clausola WHERE, perché ci saranno probabilmente altre restrizioni alla query più tardi ... e non posso capirlo per la vita di me. Ho pensato che ci fosse qualche variazione su quanto segue:

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

Ma finora nessun dado. Qualcuno può fornire la sintassi corretta qui?

risposta

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

Beh, è ​​per fetchAll() al posto di dove(), ma questo è il biglietto. Avevo già provato 'user_id IN (?)' Ma l'ho associato al risultato di implode(), non solo alla matrice direttamente. – Cyranix

2

In 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

Sebbene questo codice possa aiutare a risolvere il problema, fornendo il contesto aggiuntivo per _why_ e/o _how_ risponde alla domanda la domanda migliorerebbe significativamente il suo valore a lungo termine. Si prega di [modificare] la risposta per aggiungere una spiegazione, comprese le limitazioni e le ipotesi applicabili. –