2017-03-03 3 views
0

Ich verfolge diese Links Antwort Join kann aber nicht meine ArbeitLEFT JOIN MySql

MYSQL Left Join last row of result

Ich habe zwei Tabellen

leicester 

count area_id section toberth 
    1  LR  WL  300 
    2  LR  WL  301 
    3  ER  SN  300 


berthmove 

count area_id timemove description toberth 
    1  LR  124   6R43   300 
    2  LR  126   5RT4   300 
    3  TR  128   6TF7   310 
    4  LR  121   6TT3   301 
    5  LR  122   5RR7   301 
    6  TR  127   7YY9   300 

hier machen, ist mein Code

$stmt=$mysql_link->prepare("SELECT l.*,b.* 
    FROM leicester AS l 
    LEFT JOIN berthmove AS b ON l.toberth=b.toberth WHERE l.area_id=b.area_id AND l.section="WL" 
    LEFT JOIN berthmove AS b2 ON l.toberth=b2.toberth AND b.timemove<b2.timemove 
    WHERE b2.timemove is NULL LIMIT 1 ");  
    $stmt->execute(); 

Ich versuche, mit den Beschreibungen 5RT4 und 5RR7 zu enden, dh mit den Reihen 2 und 5 aus der Tabelle Liegeplatz. dh wählen Sie die Liegeplätze 300 und 301 aus der Tabelle "leicester" (dh sie befinden sich im Abschnitt WL) und finden Sie dann die Beschreibung gegen 300 und 301. Aber es kann nur die jeweils neueste Beschreibung (basierend auf timemove) sein. Überprüfen Sie auch, dass die area_id gleich ist.

Jede Hilfe, um Code der

Heres holen

foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $berths) 
    { 
    echo "hello"; 
    $selectberth=$berths['toberth']; 
    $description=$berths['descr']; 
    echo $description; 
    echo $selectberth; 
    } 

EDIT

aktualisiert bitte finden

 $stmt=$mysql_link->prepare("SELECT l.*,b.* 
    FROM leicester AS l 
    LEFT JOIN berthmove AS b ON l.toberth=b.toberth 
    LEFT JOIN berthmove AS b2 ON l.toberth=b2.toberth AND b.timemove<b2.timemove 
    WHERE l.area_id=b.area_id AND l.section='WL' AND b2.timemove is NULL LIMIT 1 ");  
    $stmt->execute();  
+1

Die 'where' schließlich' join's geht. Sie können nur 1 'where' in einem' select' haben. Außerdem sollte 'AND l.section =" WL "' einen Parsing-Fehler verursachen und die Seitenladung unterbrechen. Verwenden Sie Fehlerberichte. – chris85

+0

Habe das wo nach all dem bewegt. Ich erhalte einen Parsing-Fehler. Es sagt unerwartet T_string. Nicht sicher, was das Problem ist, obwohl – user2635961

+0

Sie diesen Fehler vorher nicht erhalten haben? Lesen Sie den vollständigen Kommentar und korrigieren Sie die Anführungszeichen. – chris85

Antwort

0

Statt die Änderung der WHERE-Befehl und Parsen Problem zu reflektieren der Datensatz mit dem Maximalwert von timemove für jede Gruppe von berthmove sich verbinden, versuchen Sie eine Unterabfrage für diese verwenden, dann innere verwenden verbindet alle die entsprechenden Informationen zu finden:

SELECT l.*, b2.* 
FROM leicester l 
INNER JOIN 
(SELECT area_id, toberth, max(timemove) as timemove 
    FROM berthmove 
    GROUP BY area_id, toberth) AS b1 
ON l.area_id = b1.area_id AND l.toberth = b1.toberth 
INNER JOIN berthmove b2 
ON b1.area_id = b2.area_id 
AND b1.toberth = b2.toberth 
AND b1.timemove = b2.timemove 
WHERE l.section = 'WL';