2012-06-13 8 views
14

Tengo la siguiente consulta mysql. ¿Podría decirme cómo escribir la misma consulta en la forma de Codeigniter?Uso de la cláusula WHq de WHI en la sentencia codeign

SELECT * FROM myTable 
     WHERE trans_id IN (SELECT trans_id FROM myTable WHERE code='B') 
     AND code!='B' 
+0

hicieron utiliza subconsulta en CodeIgniter como he publicado –

+1

Sí, lo han logrado usarlo con éxito hace unos minutos .. :) Gracias :) –

+0

@raheelshan. ¿Podrías por favor revisar esta publicación? http://stackoverflow.com/q/11045611/1209690 Gracias :) –

Respuesta

25

Puede usar la forma de consulta secundaria de codeigniter para hacer esto, para ello deberá hackear codeigniter. como esto
vaya a Sistema/Base de Datos/DB_active_rec.php Eliminar palabras clave pública o protegida de estas funciones

public function _compile_select($select_override = FALSE) 
public function _reset_select() 

escritura Ahora disponible en subconsulta Y ahora aquí está su consulta con el registro activo

$this->db->select('trans_id'); 
$this->db->from('myTable'); 
$this->db->where('code','B'); 
$subQuery = $this->db->_compile_select(); 

$this->db->_reset_select(); 
// And now your main query 
$this->db->select("*"); 
$this->db->where_in("$subQuery"); 
$this->db->where('code !=', 'B'); 
$this->db->get('myTable'); 

Y la cosa está hecha. ¡¡¡Aclamaciones!!!
Nota: Si bien el uso de consultas sub debe utilizar

$this->db->from('myTable') 

en lugar de

$this->db->get('myTable') 

que se ejecuta la consulta.
Mira esto también

How can I rewrite this SQL into CodeIgniter's Active Records?

Nota: En Codeigntier 3 estas funciones ya son públicas por lo que no es necesario cortar ellos.

0

intente esto:

return $this->db->query(" 
    SELECT * FROM myTable 
    WHERE trans_id IN (SELECT trans_id FROM myTable WHERE code='B') 
    AND code!='B' 
    ")->result_array(); 

No es registro activo, pero es la forma de CodeIgniter http://codeigniter.com/user_guide/database/examples.html véase la norma de consulta con la Sección Múltiples Resultados (array Version)

7

prueba este:

$this->db->select("*"); 
$this->db->where_in("(SELECT trans_id FROM myTable WHERE code = 'B')"); 
$this->db->where('code !=', 'B'); 
$this->db->get('myTable'); 

Nota: $ this-> db-> select ("*"); es opcional cuando está seleccionando todas las columnas de la tabla

15
$data = $this->db->get_where('columnname',array('code' => 'B')); 
$this->db->where_in('columnname',$data); 
$this->db->where('code !=','B'); 
$query = $this->db->get(); 
return $query->result_array(); 
+1

Esto se adapta perfectamente a mi necesidad, ¡Gracias! – Nebri

Cuestiones relacionadas