2010-02-17 11 views
14

estoy seleccionando los registros de una base de datos utilizando el equivalente de esta consulta:Zend DB fetchAll(): donde matriz cláusula con el operador IN

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

la función de llamada fetchAll() tiene un argumento que es un conjunto de los ID de usuario, y esta llamada funciona bien:

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

sin embargo, me gustaría utilizar una matriz para la cláusula where, porque es probable que haya otras restricciones a la consulta más tarde ... y no puedo resolverlo por mi vida. Pensé que sería una variación de lo siguiente:

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

Pero hasta el momento no hay dados. ¿Alguien puede proporcionar la sintaxis correcta aquí?

Respuesta

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

Bueno, es para fetchAll() en lugar de en(), pero eso es el billete. Intenté 'user_id IN (?)' Antes pero lo asocié con el resultado de implode(), no solo el arreglo directamente. – Cyranix

2

En 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

Aunque este código puede ayudar a resolver el problema, proporcionando contexto adicional con respecto a _por qué_ y/o _how_ responde la pregunta mejoraría significativamente su valor a largo plazo. Por favor, [edite] su respuesta para agregar una explicación, incluidas las limitaciones y suposiciones de . –