que quieren producir el siguiente código SQL mediante Active Records en CodeIgniter:Agrupación cláusulas WHERE en CodeIgniter
WHERE name != 'Joe' AND (age < 69 OR id > 50)
haciendo lo siguiente parece ser la medida de lo que puedo conseguir, no puedo encontrar la manera de agruparlos
$this->db->select()->from('users')->where('name !=', 'Joe')->where('age <', 69)->or_where('id <', $id);
¿Alguna idea? Mi consulta SQL es demasiado compleja, por lo que no quiero volver a escribir todo en SQL tradicional.
ACTUALIZACIÓN
Mi código SQL se genera dinámicamente en función de los valores de ciertos parámetros pasados al método de modelo. El problema de no poder usar paréntesis causa un problema porque la precedencia del operador es tal que AND
se evalúa primero antes de OR
.
* Aquí está una parte de mi activa código de registros, donde hay algún otro código antes y después de que:
... some $this->db->where() ...
... some $this->db->where() ...
if($price_range) {
$price_array = explode('.', $price_range);
for($i = 0; $i < count($price_array); $i++) {
if($i == 0) {
$this->db->where('places.price_range', $price_array[$i]);
} else {
$this->db->or_where('places.price_range', $price_array[$i]);
}
}
}
... some $this->db->where() ...
... some $this->db->where() ...
El problema viene porque estoy utilizando $this->db->or_where()
que introduce una cláusula OR
que lanza el operador prioridad en el desorden sin poder usar ()
para cambiar el orden.
** ¿Hay alguna manera de solucionar esto? **
Eso no' parece ser demasiado compleja como para no deje que su escritura en SQL llanura – dynamic
@ yes123: el ejemplo anterior es sólo un ejemplo, mis registros activos solos generan hasta 60 + líneas de código SQL real generado dinámicamente de las cuales muchas son sentencias SQL condicionales. – Nyxynyx
Esta es una limitación desafortunada de la clase Activerecord en Codeigniter. – timw4mail