2016-10-23 5 views
0

Seit ein paar Tagen kann ich keine Lösung für dieses eine Problem beim Sortieren der Daten aus einer verbundenen Tabelle finden.Sortieren von Problemen mit mySQL JOIN

Sagen Sie, ich mache Restaurant-Routen für Benutzer. Jeder Benutzer hat ein paar Restaurants in seiner Reiseroute.

Ich habe zwei Tabellen, eine enthält die Informationen über die Route eines Benutzers (wann wird er Restaurants besuchen, welche Restaurants), und eine enthält die Informationen über alle Restaurants, die ich kenne.

Führer ................... und .............. Restaurants

userid    ---> id 
restaurant1_id -->--|  name 
date1    |  style 
restaurant2_id -->--|  address 
date2 

Das "restaurant1_id" oder "restaurant2_id" entspricht dem "id" in der Restauranttabelle. So bin ich innere diese Tabellen wie diese Verbindung:

SELECT restaurants.name AS name, restaurants.style AS style, restaurants.address AS address, guides.date1 AS date1, guides.date2 AS date2 
FROM `guides` 
INNER JOIN `restaurants` 
    ON guides.restaurant1_id = restaurants.id or guides.restaurant2_id = restaurants.id 
WHERE guides.userid = 2 

Say Ich mag würde alle Infos von allen Restaurants ein Benutzer mit der ID „2“ besuchen werden, um zu sehen. Mit der folgenden Abfrage, ich bin immer das gewünschte Ergebnis:

$result = $conn->query($sql); 
    if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     echo 
     $row['name'].'<br>' 
     .$row['style'].'<br>'  
     .$row['address'].'<hr>' ; 
     } 
    } 
else { 
    echo 'No results.'; 
    } 

ich eine Geige here erstellt.

Wo ich Probleme habe, sortiert die Ergebnisse. Ich möchte, dass das Restaurant, das in der Tabelle "guides" als "restaurant1_id" bezeichnet wird, vor "restaurant2_id" angezeigt wird.

Ein anderes Problem ist das Datum. Ich kann nicht herausfinden, wie 'date1' neben dem Namen 'restaurant1_id' angezeigt wird.

Soll ich alle Daten in Variablen speichern oder gibt es eine bessere Möglichkeit, dies zu erreichen? Ich freue mich über Vorschläge!

+0

Big Problem scheint zu sein, dass Sie mehrere Zeilen zurückgebracht zu bekommen. Ich vermute, dass Sie sich mehrfach an den Tisch des Restaurants anschließen wollen, einmal für jedes Restaurant. – Kickstart

+0

Vielen Dank für Ihren Vorschlag Kickstart. Garden Apple hat jedoch eine Lösung für dieses Problem gefunden. – Rens

Antwort

0

Try Abfrage

SELECT IF(guides.restaurant1_id = restaurants.id, 1, 0) as srt , 
    restaurants.name AS name, restaurants.style AS style, 
    restaurants.address AS address, guides.date1 AS date1, guides.date2 AS date2 
    FROM `guides` 
INNER JOIN `restaurants` ON guides.restaurant1_id = restaurants.id or guides.restaurant2_id = restaurants.id 
WHERE guides.userid = 2 
order by srt DESC 

Ergebnisse anzeigen:

$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
while($row = $result->fetch_assoc()) { 
    echo 
    $row['name'].'<br>' 
    .($row['srt']?$row['date1']:$row['date2']).'<br>' 
    .$row['style'].'<br>'  
    .$row['address'].'<hr>' ; 
    } 
} 
else { 
    echo 'No results.'; 
} 
+0

Das funktioniert perfekt. Vielen Dank. Und ich konnte es ändern, damit es mit mehr als 2 Restaurants funktioniert. – Rens