2016-05-16 4 views
0

Dies ist Beispiel für meinen Code, der Informationen aus zwei MySQL-Tabellen erhalten, eher einfache Sachen.Ich kann nicht herausfinden, LINKER JOIN, um alle aus der linken Tabelle zu bekommen und nicht Ergebnisse von rechts in MYSQLI duplizieren

Eine Tabelle enthält Realisierungen und die anderen Typen für Realisierungen. Korrelation links Join wäre realisations.id = realisations_kind.realisation_id, meine eigentliche Code, hat keine linke Join, ich habe es nur eine schmutzige Art und Weise gemacht.

 $s = $mysqli->prepare("SELECT id, name FROM realisations"); 
     $s->execute(); 
     $s->bind_result($id, $name); 
     $s->store_result(); 
     while($s->fetch()) 
     { 
      /***/ 
      $si = $mysqli->prepare("SELECT kind FROM realisations_kind WHERE realisation_id = ?"); 
      $si->bind_param('i', $id); 
      $si->execute(); 
      $si->bind_result($kind); 
      $si->store_result(); 
      while($si->fetch()) 
      { 
       if(isset($kind)) { 
        $arrayKind[] = $kind; 
       } 

      } 

      $return[] = array('id' => $id, 'name' => $name, 'kind' => $arrayKind); 
      $arrayKind = null; 
      /***/ 
     } 

Dies wird ausgegeben, so Array

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => Building 1 
      [kind] => Array 
       (
        [0] => 0 
        [1] => 1 
       ) 

     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => Building 2 
      [kind] => Array 
       (
        [0] => 1 
       ) 

     ) 

    ..................more 

so, wie Sie bekam ich bei Index 0 Taste „Art“ sehen kann, die 2 Ergebnisse bekam und bei Index 1 bekam „Art“ 1 Ergebnis, das ist richtiges Ergebnis, weil diese Tabelle 3 Datensätze hat, die zwei ID1 und eine ID2 zugeordnet sind.

Ich habe versucht, dies über linke Join und Gruppe SQL-Anweisung zu tun, aber ich kann nicht herausfinden, wie das zu tun, ich habe das mehrmals in der Vergangenheit, aber ich habe es vergessen. Jetzt fülle ich mich etwas blöd, um so etwas Grundlegendes dort zu fragen.

LEFT JOIN Ergebnisse linken Tabelle alle Zeilen führen aber Duplikate rechten Tabelle oder wenn i Rüstgruppe durch Duplikate von rechts entfernen, aber nicht alle Ergebnisse von links Tabelle ausdrucken, gibt nur erste :(

Antwort

1

Natürlich LEFT JOIN gibt Duplikate in der linken Tabelle, das ist die Art von beitritt. SQL keine verschachtelten Tabellen zurückgibt. Alles in einer einzigen Tabelle kombiniert wird. Sie haben die Daten in PHP zu strukturieren.

SELECT `r`.`id`, `r`.`name`, `k`.`kind` 
FROM 
    `realisations` `r` 
LEFT JOIN 
    `realisations_kind` `k` 
ON `k`.`realisation_id` = `r`.`id` 
; 

PHP so etwas haben könnte

while($s->fetch()) 
{ 
    if(!isset($data[$id])) 
    { 
    $data[$id] = 
    [ 'id' => $id, 
     'name' => $name, 
     'kind' => [$kind] 
    ] 
    } 
    else 
    { 
    $data[$id]['kind'][] = $kind; 
    } 
} 

Wenn Sie ein Null-basiertes numerisches Array möchten, tun Sie einfach eine $data = array_values($data) nach der Schleife.

+0

Lol ich musste 5 Minuten denken, wie es funktioniert, aber es ist sehr einfach. Vielen Dank. Wie wäre es mit SQL-Anweisungen ist es möglich, es über SQL zu tun? – Cameleon

+0

Was ist möglich? Verschachtelte Daten sind nicht möglich. MS Access verfügt über einige Benutzeroberflächenfunktionen, um verschachtelte Daten anzuzeigen. Aber es ist keine SQL-Funktion. –

+0

Okay danke nochmal. – Cameleon