2011-02-06 66 views
9

Soy nuevo en la construcción de bases de datos y estoy tratando de hacer un JOIN basado en tener tres tablas de base de datos.Uniones múltiples en Codeigniter

Table A = ID, Name, etc 
Table B = ID, Name, etc 
Table C = ID, TableAId, TableBId 

Lo que no puedo entender es usar el registro activo de cómo hacer esta selección. Intento hacer la menor cantidad posible de solicitudes, pero me estoy quedando perplejo sobre cómo debería escribirse todo sin hacer tres llamadas por separado.

Respuesta

30
$this->db->select('*'); 
$this->db->from('TableA AS A');// I use aliasing make joins easier 
$this->db->join('TableC AS C', 'A.ID = C.TableAId', 'INNER'); 
$this->db->join('TableB AS B', 'B.ID = C.TableBId', 'INNER'); 
$result = $this->db->get(); 

La función unirse funciona así: join ('TableName', 'el estado CERRADO', 'Tipo de unirse a');

El SQL equivilent:

SELECT * 
FROM TableA AS A 
    INNER JOIN TableC AS C 
    ON C.TableAId = A.ID 
    INNER JOIN TableB AS B 
    ON B.ID = C.ID 

me encontré con que escribir el código SQL en primer lugar, someter a pruebas y luego convertir al estilo registro activo minimiza el error.

4
$this->db->select('*'); 
$this->db->from('blogs'); 
$this->db->join('comments', 'comments.id = blogs.id'); 
$this->db->join('authors', 'authors.id = comments.author_id'); 

Espero que consigas mi ejemplo.

Simplemente agregue otro $this->db->join();

Para consultas complejas que puede ser mejor mirando un ORM como doctrine

0

si desea una consulta flexibles, puedes usar:

http://codeigniter.com/user_guide/database/results.html

que utiliza la siguiente sintaxis $query = $this->db->query('SELECT * FROM my_table');

Ésta es la consulta:

SELECT a.name as namea ,b.name as nameb FROM tablec c 
JOIN tablea a ON a.ID = c.ID 
JOIN tableb b ON b.ID = c.ID 

es posible que desee leer más acerca de las uniones here

luego ir a través de los resultados de tal manera:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row) 
{ 
    echo $row['namea']; 
    echo $row['nameb']; 
} 
+1

utilizando el comando de consulta es sólo una manera rápida de salir del problema, esto no resuelve nada por él . También existen posibles riesgos de seguridad porque IC no escapará a los datos individuales. –

0
$this->db->select('*'); 

$this->db->from('table1'); 

$this->db->join('table2','table1.id=table2.id'); 

$this->db->join('table3','table2.id=table3.id'); 

$this->db->join('table4','table3.id=table4.id'); 

$this->db->join('table5','table5.id=table4.id'); 

$this->db->where('table5.id',$this->session->userdata('id'));//getting value from session and match the id of table5 and then show data 

$data=$this->db->get()->result();//all data store in $data variable 
Cuestiones relacionadas