Limit in LEFT JOIN

Thomasio

Erfahrenes Mitglied
Ich versuche die folgenden beiden Abfragen unter einen Hut zu bringen, mit dem Ziel das Ergebnis anhand der zweiten Abfrage zu sortieren.

Code:
$query = mysql_query("SELECT * FROM `Tabelle1`");
while($row = mysql_fetch_object($query))
{
     $query2 = mysql_query("SELECT * FROM `Tabelle2` WHERE `Feld2` = ".$row->Feld1." ORDER BY `id` DESC LIMIT 0,1");
}

Das Problem ist, dass Feld1 in Tabelle1 unique ist, und in Tabelle2 dem Feld2 entspricht, dort aber mehrfach vorkommen kann.
Wenn es in Tabelle2 mehrfach vorkommt will ich den Eintrag mit der grössten id lesen, die in Tabelle2 wiederum unique ist.
Richtig trickreich wird es aber, wenn ich das Ergebnis noch nach Tabelle2->Feld3 sortieren will, da blicke ich nicht mehr durch.
Vorgestellt habe ich mir das etwa so:

Code:
$query = mysql_query("SELECT a.*, b.* FROM `Tabelle1` AS a LEFT JOIN `Tabelle2` AS b ON a.`Feld1` = b.`Feld2` ORDER BY b.`Feld3`");

Aber da fehlt offensichtlich das LIMIT aus der zweiten Abfrage, sprich er liest die erste Zeile die er findet, statt die mit der grössten id.
Möglicherweise gleiche Feldnamen sind erstmal kein Problem, das kann ich lösen wenn das Hauptproblem mal gelöst ist.

Kann mir jemand auf die Sprünge helfen?
 
Ein Tipp: Formatiere deine SQL-Statements. Es wird dann lesbar
PHP:
$sql = <<<SQL
SELECT 
  a.*, 
  b.* 
FROM 
  `Tabelle1` AS a 
  LEFT JOIN `Tabelle2` AS b 
    ON a.`Feld1` = b.`Feld2` 
ORDER BY 
  b.`Feld3`
SQL;

mysql_query($sql);

So, ungeprüft - dürfte aber etwa das abdecken was du suchst
SQL:
SELECT
	t1.*,
	t2.*
FROM
	tabelle1 AS t1
	LEFT JOIN (
			 SELECT
			 	@itemNr := IF(@lastFeld2 = src2.feld2, @itemNr+1, 1) 	AS itemNr,
			 	@lastFeld2 = src2.feld2									AS feld2,
			 	src2.*
			 FROM
			 	(SELECT @itemNr:=0, @lastFeld2:=NULL) 					AS vars,
			 	(SELECT * FROM tabelle2 ORDER BY feld3) 				AS src2
		) AS t2
		ON
			t1.feld1 = t2.feld2
WHERE
	t2.itemNr <= 2;
 
Zurück