CodeIgniter / PHP / MySQL: recuperación de datos con JOIN

Soy nuevo en PHP / MySQL y súper nuevo en CodeIgniter. Tengo información en muchas tablas de MySQL. Quiero recuperarlo con JOIN, donde las claves primarias de las tablas son iguales a $ variable … ¿Cómo puedo hacerlo y obtener todos los campos sin el campo de clave principal?

Lo que estoy haciendo ahora es esto (solo se unieron dos tablas aquí):

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), título, año, tiempo de ejecución y diagtwig son columnas de la primera tabla y poster_url es un campo de la segunda tabla. La segunda tabla también contiene una columna de ID (PK) que no quiero recuperar porque ya la tengo.

Jon tiene razón. Aquí hay un ejemplo:

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

Esto devolverá los objetos que tienen propiedades -> id, -> title, -> year, -> totaltime, y -> poster_url. No necesitará el código adicional para obtener los datos de cada fila.

No olvide que si la syntax de Active Record se vuelve un poco difícil de manejar, puede usar consultas SQL completas y obtener los mismos resultados:

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

Ambos formularios garantizarán que sus datos se escapen correctamente.

Registro activo de CodeIgniter

Enlazar consultas en CodeIgniter

Un asterisco devolverá todos los campos. Para devolver un subconjunto de estos, es decir, todos los campos separados del campo de identificación repetido, simplemente enumere las columnas que necesita en lugar de usar ‘*’.

A menudo es una buena idea no usar asterisco de todos modos. En el futuro de la aplicación, alguien puede agregar un campo grande a la tabla que será excedente a sus requisitos y ralentizará sus consultas.

Simplemente ponlo con el método de encadenamiento:

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