6 Stimmen

CodeIgniter/PHP/MySQL: Abrufen von Daten mit JOIN

Ich bin neu in PHP/MySQL und super-neu in CodeIgniter.. Ich habe Informationen in vielen MySQL-Tabellen. Ich möchte sie mit JOIN abrufen, wobei die Primärschlüssel der Tabellen gleich $variable sind... Wie kann ich das machen und alle Felder ohne das Primärschlüsselfeld abrufen???

Was ich jetzt mache, ist Folgendes (hier sind nur zwei Tabellen verbunden):

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), title, year, runtime und plotoutline sind Spalten aus der ersten Tabelle und poster_url ist ein Feld aus der zweiten Tabelle. Die zweite Tabelle enthält auch eine Spalte ID (PK), die ich nicht abrufen möchte, weil ich sie bereits habe.

21voto

GloryFish Punkte 12547

Jon hat Recht. Hier ist ein Beispiel:

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

Dies gibt Objekte mit den Eigenschaften ->id, ->title, ->year, ->totaltime und ->poster_url zurück. Der zusätzliche Code zum Abrufen der Daten aus jeder Zeile ist nicht erforderlich.

Vergessen Sie nicht: Wenn Ihnen die Active Record-Syntax zu umständlich ist, können Sie auch vollständige SQL-Abfragen verwenden, um die gleichen Ergebnisse zu erzielen:

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

Beide Formulare gewährleisten, dass Ihre Daten ordnungsgemäß übermittelt werden.

CodeIgniter Aktiver Datensatz

Abfragebindung in CodeIgniter

4voto

Jon Winstanley Punkte 22342

Ein Sternchen gibt alle Felder zurück. Um eine Teilmenge davon zurückzugeben, d. h. alle Felder außer dem wiederholten id-Feld, führen Sie einfach die gewünschten Spalten auf, anstatt "*" zu verwenden.

Oft ist es ohnehin eine gute Idee, keine Sternchen zu verwenden. In der Zukunft der Anwendung könnte jemand ein großes Feld zur Tabelle hinzufügen, das Ihre Anforderungen überflüssig macht und Ihre Abfragen verlangsamt.

1voto

JonathanEyre Punkte 63

Einfach gesagt mit Methodenverkettung:

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

0voto

Ks Sjkjs Punkte 81
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X