2010-05-05 64 views
7

¿Cómo puedo seleccionar filas de dos o más tablas?Codeigniter: seleccionar de varias tablas

Soy la creación de campos predeterminados para un formulario, y necesito los valores de dos tablas ...

Mi código actual se lee:

$this->CI->db->select('*'); 
    $this->CI->db->from('user_profiles'); 
    $this->CI->db->where('user_id' , $id); 
    $user = $this->CI->db->get(); 
    $user = $user->row_array(); 
    $this->CI->validation->set_default_value($user); 

Respuesta

19

El ejemplo de la Guía del usuario debe explicar esto:

$this->db->select('*'); // <-- There is never any reason to write this line! 
$this->db->from('blogs'); 
$this->db->join('comments', 'comments.id = blogs.id'); 

$query = $this->db->get(); 

// Produces: 
// SELECT * FROM blogs 
// JOIN comments ON comments.id = blogs.id 

ver toda la cosa bajo Active Record página en la Guía del usuario.

+0

El ejemplo en la Guía del usuario no parece producir un campo de la segunda tabla. ¿Cómo haces eso? –

+0

* = todo, de todas las tablas disponibles. Si no aparece, estás haciendo algo mal. Además, si tiene dos campos con el mismo nombre en diferentes tablas, solo se mostrará uno. Debes hacer 'foo como barra' para obtener' -> barra' –

0
$SqlInfo="select a.name, b.data fromtable1 a, table2 b where a.id=b.a_id"; 
$query = $this->db->query($SqlInfo); 

tratan de esta manera, puede agregar una tercera tabla llamada c y agregar un comando 'y' al comando sql.

+0

soy un novato importante. ¿Puedes explicar esto un poco más? –

9

Simplemente agregue la otra tabla al método "-> desde()". Algo así como:

$this->db->select('t1.field, t2.field2') 
      ->from('table1 AS t1, table2 AS t2') 
      ->where('t1.id = t2.table1_id') 
      ->where('t1.user_id', $user_id); 
+0

Eso producirá sintaxis rota. –

+0

No en mi extremo. ¿Puedes elaborar? – Favio

+1

Esa sintaxis solo se admite en php5 – Mint

1

Creo que la sintaxis es incorrecta. Debe seleccionar un registro. Tengo dos tablas, y tengo una identificación de una transferencia de tabla por parámetro y la relación de ambas tablas.

8

Creo que la pregunta no era tanto sobre uniones como cómo mostrar valores de dos tablas diferentes: la Guía del usuario no parece explicar esto.

Esta es mi opinión:

$this->db->select('u.*, c.company, r.description'); 
    $this->db->from('users u, company c, roles r'); 
    $this->db->where('c.id = u.id_company'); 
    $this->db->where('r.permissions = u.permissions'); 
    $query = $this->db->get(); 
+0

Esto es exactamente lo que necesitaba ver. No estaba seguro de si una cadena o matriz delimitada por comas con valores múltiples sería la sintaxis correcta. Además, no estaba seguro de hacer coincidirlos en el método where. – notacouch

+0

Puede hacer esto si necesita el conjunto de registros: return $ this-> db-> get() -> result(); –

+0

mejor solución, funcionó para mí –

1

probar este

$this->db->select('*') 
      ->from('student') 
      ->where('student.roll_no',$id) 
      ->join('student_details','student_details.roll_no = student.roll_no') 
      ->join('course_details','course_details.roll_no = student.roll_no'); 
    $query = $this->db->get(); 
    return $query->row_array();