PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Left Join



tomi
08-03-2004, 21:01
Hallo!

Ich habe folgendes Syntax:


SELECT ..
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON (...) ORDER by t2.feld DESC LIMIT 0,1
WHERE ...

Hier bekomme ich einen Syntax-Fehler in der Zeile


LEFT JOIN tab2 AS t2 ON (...) ORDER by t2.feld DESC LIMIT 0,1
Das liegt an dem Order by und an dem Limit

Aber ich muss trotzdem irgendwie die verknüpfte Tabelle tab2 nach einem best. Feld ordnen und dann von diesem Feld den höchsten und den zweithöchsten Wert erhalten.
Nur wie mache ich das?
Danke schonmal!

wackeldackel
09-03-2004, 06:00
Guten Morgen,

ich glaube nicht, dass das an dem order by liegt.

LIMIT akzeptiert doch nur einen Wert, soweit ich weiss.
Also wenn du nur zwei Werte haben willst, musst du LIMIT 2 nehmen.

gruss Klaus

Pingu
09-03-2004, 06:57
Hi,

ich vermute ich habe den Fehler gefunden:


Original geschrieben von tomi

SELECT ..
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON (...) ORDER by t2.feld DESC LIMIT 0,1
WHERE ... <-------------------
richtig muß es lauten:

SELECT ..
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON (...)
WHERE ... <-------------------
ORDER by t2.feld DESC LIMIT 0,1

D.h. nach der Doku auf mySQL.com zu SELECT (http://www.mysql.com/doc/de/SELECT.html) ist einfach die Reihenfolge falsch.

@wackeldackel
Das Limit ist vollkommen richtig. Man kann einen aber auch zwei Werte angeben. Ein Wert heißt, dass die genausoviele Zeilen maximal zurückgegeben werden. Bei zwei Werten steht der erste für den Begin also die erste Zeile aus dem Ergebnis die zurückgegeben werden soll.

Pingu

tomi
09-03-2004, 08:03
Hallo!

Danke für eure Antworten.

@Pingu:
Wenn ich das so mache

SELECT ..
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON (...) ORDER by t2.feld DESC LIMIT 0,1
WHERE ... <-------------------
Wenn ich nun 2 LEFT JOIN Verbindungen einbaue wie geht das dann?
Ich will einmal aus der Tab2 den höchsten Wert eines Feldes z.B. feldx und einmal den zweithöchsten Wert aus der Tabelle tab2 von feldx erhalten?

undefined
09-03-2004, 08:37
Also mit dem was du zeigst kann man wenig anfangen, weil du die entscheidenden Inhalte immer schön mit Punkten versiehst. Zeige bitte deinen Script ausschnitt.
Zum Thema Joinen, bei Join gibt es einen Punkt zu beachten der immer wieder falsch gemacht wird, wenn einer der Join Argumente Null ist wird das query abbrechen weil MySQL nichts damit anfangen kann.

mehlvogel
09-03-2004, 09:31
Im Prinzip reicht schon was er geschrieben hat, das WHERE muss vor das ORDER und vor das LIMIT, hattest du ja schon erkannt. Einen zweiten JOIN da reinzubauen ist nicht schwer:



SELECT (...)
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON (...)
LEFT JOIN tab3 AS t3 ON (...)
WHERE (....)
ORDER BY t2.feld DESC
LIMIT 0,1


Hmm... deine letzte Frage verstehe ich icht so ganz, entweder du machst zwei Abfragen (was natürlich nicht so gut ist) oder du setzt das LIMIT auf 0,2 dann kriegst halt die ersten beiden.

SChlagt mich wenn ichs falsch verstanden habe.

Gaert
09-03-2004, 20:23
Das das hier nichts mit PHP zu tun hat verschiebe ich das ganze mal in Datenbank Forum.

tomi
10-03-2004, 16:29
Hallo!

Mit diesem Code:

SELECT (...)
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON (...)
LEFT JOIN tab3 AS t3 ON (...)
WHERE (....)
ORDER BY t2.feld DESC
LIMIT 0,1

Erreiche ich doch nur, dass die Einträge von der Tabelle tab1 geordnert und limitiert werden.
Ich möchte mit

LEFT JOIN tab2 AS t2 ON (...) ORDER by tab2.feld DESC LIMIT 0,2
bewirken, dass die Einträge aus tab2 geordnet und limiert werden. Diese Syntax aber ist nicht zulässig, wie mach ich das nun?