2017-12-05 2 views
-1

Diese Abfrage führt drei Join-Operationen mit 3 Tabellen. Aber es ist nicht in Ordnung ich sehe..ich versuche alle Reihen im Echo auszugeben, aber ich habe Pech.Join 3 Tabellen mit Where-Klausel

Mysql Tabellenspalten:

tours 
------ 
titlu_slider | desc_slider | poza_slider | poza_articol | pret 

tours_review 
---------- 
name | time_added | review_text 

tours_overview 
------------ 
descriere | titlu_box1 | desc_box1 | titlu_box2 | desc_box2 | titlu_box3 | desc_box3 | titlu_box4 | desc_box4 

Php Code:

<?php 
$db = mysqli_connect("localhost", "root", "fidodido", "antonytravel"); 
$q = mysqli_query($db,"SELECT * FROM tours INNER JOIN tours_review INNER JOIN tours_overview WHERE id = ".$_GET['id'].""); 

while ($row = mysqli_fetch_assoc($q)) { 
$titlu_slider=$row['titlu_slider']; 
$desc_slider=$row['desc_slider']; 
$poza_slider=$row['poza_slider']; 
$poza_articol=$row['poza_articol']; 
$pret=$row['pret']; 
## Review table 
$name_review=$row['name']; 
$time_added=$row['time_added']; 
$review_text=$row['review_text']; 
## Overview table 
$descriere=$row['descriere']; 
$titlu_box1=$row['titlu_box1']; 
$desc_box1=$row['desc_box1']; 
$titlu_box2=$row['titlu_box2']; 
$desc_box2=$row['desc_box2']; 
$titlu_box3=$row['titlu_box3']; 
$desc_box3=$row['desc_box3']; 
$titlu_box4=$row['titlu_box4']; 
$desc_box4=$row['desc_box4']; 

    echo '<section class="parallax_window_in" data-parallax="scroll" data-image-src="'.$poza_slider.'" data-natural-width="1400" data-natural-height="470"> 
     <div id="sub_content_in"> 
      <div id="animate_intro"> 
       <h1>'.$titlu_slider.'</h1> 
       <p>"'.$desc_slider.'"</p> 
      </div> 

     </div>'; 

Einige helfen needed..thanx.

+1

Wir wissen absolut nichts über diese 3 Tabellen! Möchten Sie, dass wir raten, wie sie beitreten? Ich könnte einige sehr interessante (aber irrelevante) Spaltennamen für Sie erfinden. (also sagen Sie uns, welche Spalte in jeder Tabelle sind, zumindest) –

+0

"Aber ich habe Pech" ist keine besonders nützliche Beschreibung des Problems ... – David

+0

Sorry, ich habe meine Frage aktualisiert – Alex

Antwort

0

INNER Join zeigt die Datensätze an, wenn passende Datensätze vorhanden sind. Verwenden Sie OUTER Join, um alle Datensätze anzuzeigen, wenn sie nicht in anderen Tabellen vorhanden sind.

0

Sie vermissen ein paar Dinge in Ihrer Abfrage. Speziell bezogen auf die Felder, die die Tabellen verknüpfen. Zu tun dies die beste Praxis verbindet, ist jede Tabelle zu benennen und dann diesen Namen verwenden, um in einer ON-Anweisung auf, die die Tabellen

So

SELECT * FROM tours 
INNER JOIN tours_review 
INNER JOIN tours_overview 
WHERE id = ".$_GET['id']."" 

werden soll:

SELECT * FROM tours AS t 
INNER JOIN tours_review AS r ON r.somefield = t.somefield 
INNER JOIN tours_overview AS o ON o.somefield = t.somefield 
WHERE id = ".$_GET['id']."" 

MySQL Wenn Sie nicht wissen, was sie verbindet, verbinden Sie keine Tabellen.

2

Sie müssen angeben, wie, wie die Tabellen miteinander in Beziehung stehen, die unter so etwas wie die auf Bedingungen aussehen könnte gezeigt (das sind nur Vermutungen)

 
SELECT * 
FROM tours t 
INNER JOIN tours_review trev ON t.id = trev.tour_id 
INNER JOIN tours_overview tovr ON = t.id = tovr.tour_id 
WHERE t.id = $whatever 

Sie stellen sich die Frage, welche Art von beitreten, weil Wenn Sie eine Tour ohne Bewertungen haben, möchten Sie sie wahrscheinlich trotzdem auflisten. Für diese Art von Beziehung benötigen Sie einen "Outer Join".

 
SELECT * 
FROM tours t 
LEFT OUTER JOIN tours_review trev ON t.id = trev.tour_id 
INNER JOIN tours_overview tovr ON = t.id = tovr.tour_id 
WHERE t.id = $whatever 

Wenn jeder jede Tour einen „Überblick“ dann hat, dass kann eine „innere Verknüpfung“ bleiben

EDIT: Bitte beachten Sie, dass Sie Präfix müssen Namen jeder Spalte Referenz mit einem Tisch oder Tabellenalias (Ich habe Tabellenaliase verwendet, um die Abfrage kürzer zu machen). Wenn Sie dies nicht tun, kann Ihre Abfrage fehlschlagen, z. Wenn jede Tabelle eine Spalte id hat und Sie nur nach where id = 123 fragen, wird die Abfrage nicht wissen, welche Tabelle zu verwenden ist und die Abfrage würde Fehler.

+0

Warnung: mysqli_fetch_assoc() erwartet, dass Parameter 1 mysqli_result, boolean ist – Alex