2010-05-05 18 views
7

Jak wybrać wiersze z dwóch lub więcej tabel?Codeigniter: Wybierz z wielu tabel

mam ustawienie domyślne dla pól formularza, a ja potrzebuję wartości z dwóch tabel ...

Mój obecny kod brzmi:

$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); 

Odpowiedz

19

przykładu z podręcznika powinna wyjaśnić:

$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 

Zobacz całość pod Active Record stronie w podręczniku użytkownika.

+0

Przykład w podręczniku użytkownika nie wydaje się tworzyć pola z drugiej tabeli. Jak to robisz? –

+0

* = wszystko, ze wszystkich dostępnych stołów. Jeśli się nie pojawi, robisz coś nie tak. Również jeśli masz dwa pola o tej samej nazwie w różnych tabelach, to tylko jeden będzie wyświetlany. Musisz zrobić 'foo as bar', aby uzyskać' -> pasek' –

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

spróbować w ten sposób, możesz dodać trzecią tabelę o nazwie c i dodać polecenie "i" do polecenia sql.

+0

jestem głównym noobem. Czy możesz wyjaśnić to nieco więcej? –

9

Po prostu dodaj drugą tabelę do metody "-> od()". Coś jak:

$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

To spowoduje złamanie składni. –

+0

Nie po mojej stronie. Czy możesz rozwinąć? – Favio

+1

Ta składnia jest obsługiwana tylko w php5 – Mint

1

Myślę, że składnia jest niepoprawna. Musisz wybrać jeden rekord. Mam dwie tabele i mam identyfikator z jednego transferu tabeli według parametru i relacji obu tabel.

8

Myślę, że pytanie dotyczyło nie tyle sprzężeń, ile wyświetlania wartości z dwóch różnych tabel - podręcznik nie wydaje się tego wyjaśniać.

Oto moje zdanie:

$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

To jest dokładnie to, co muszę zobaczyć. Nie było pewności, czy rozdzielany przecinkami ciąg znaków lub tablica z wieloma wartościami będą właściwą składnią. Nie był również pewien, czy dopasować je do metody where. – notacouch

+0

Możesz to zrobić, jeśli potrzebujesz zestawu rekordów: return $ this-> db-> get() -> result(); –

+0

najlepsze rozwiązanie, pracował dla mnie –

1

Spróbuj

$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(); 
Powiązane problemy