CodeIgniter / PHP / MySQL: JOIN ile Veri alınıyor

3 Cevap php

I'm new to PHP/MySQL and super-new to CodeIgniter.. I have information in many MySQL tables. I want to retrieve it with JOIN where the tables primary keys are equal to $variable... How can I do it and get all the fields without the primary key field???

Ben şimdi ne yapıyorum (sadece iki tablo burada katıldı) şudur:

function getAll($id) {

	$this->db->select('*');
	$this->db->from('movies');
	$this->db->join('posters', 'movies.id= posters.id');
	// WHERE id = $id ... goes here somehow...
	$q = $this->db->get();

	if ($q->num_rows() == 1) {
		$row = $q->row();
		$data = array(
				'id' => $row->id,
				'title' => $row->title,
				'year' => $row->year,
				'runtime' => $row->runtime,
				'plotoutline' => $row->plotoutline,
				'poster_url' => $row->poster_url
			);
	}

	$q->free_result();
	return $data;

id (PK), başlık, yıl, çalışma zamanı ve plotoutline ilk tablodan sütunlar ve poster_url ikinci tablodaki bir alandır. İkinci tabloda da ben zaten çünkü Al istemiyorum Kimlik (PK) sütun içerir.

3 Cevap

Jon hakkıdır. İşte bir örnek:

$this->db->select('movies.id, 
                   movies.title, 
                   movies.year, 
                   movies.runtime as totaltime,  
                   posters.poster_url');
$this->db->from('movies');
$this->db->join('posters', 'movies.id= posters.id');
$this->db->where('movies.id', $id);
$q = $this->db->get();

TotalTime>, - ve -, yıl> -, title> -> id - bu var nesneleri dönecektir> poster_url özellikleri. Her satırdan veri getirmek için ek kod gerekmez.

Active Record sözdizimi biraz binlerden alırsa, tam SQL sorguları kullanmak ve aynı sonuçları elde edebilirsiniz, unutmayın:

$sql = "SELECT movies.id,
        movies.title,
        movies.year,
        movies.runtime as totaltime,
        posters.poster_url
        FROM movies
        INNER JOIN posters ON movies.id = posters.id
        WHERE movies.id = ?"

return $this->db->query($sql, array($id))->result();

Her iki form veri düzgün kaçtı sağlayacaktır.

CodeIgniter Active Record

Query Binding in CodeIgniter

Bir yıldız bütün alanları dönecektir. Bu bir alt kümesini dönmek için, yani tüm alanları dışında tekrarlanan id alanını oluşturacak, sadece yerine kullanımı daha gerektiren liste sütun '*'.

Zaten yıldız kullanmayın genellikle iyi bir fikirdir. App Gelecekte, birisi gerekenden fazla olacak tabloya geniş bir alan eklemek gerekebilir ve sorguları yavaş olacaktır.

Sadece yöntem zincirleme ile koyun:

$this->db->select('*')
         ->from('movies')
         ->join('posters', 'movies.id= posters.id')
         ->where('movies.id', $id)
         ->get();