MySql
Phil
- datenbank
1 Vinzenz Mai0 dedlfix
0 Ilja
Hallo, ich möchte den nächsthöheren Eintrag aus einer
Mysql-DB ausgeben.
SELECT name WHERE order_id is > $aktuelle_order_id LIMIT 1
So würde es gehen, oder gibt es einen speziellen Befehl
für den Fall?
Danke
Phil
Hallo,
Hallo, ich möchte den nächsthöheren Eintrag aus einer
Mysql-DB ausgeben.
was verstehst Du unter dem nächsthöheren Eintrag?
SELECT name WHERE order_id is > $aktuelle_order_id LIMIT 1
So würde es gehen,
Nö, das gibt einen Syntaxfehler, es fehlt die FROM-Klausel, die Kombination der Operatoren is und > ist nicht gestattet - und selbst wenn Du dies korrigierst, fehlt immer noch die notwendige ORDER-BY-Klausel, um sicher den gewünschten Wert zu erhalten.
oder gibt es einen speziellen Befehl für den Fall?
Es gibt bestimmt SQL-Anweisungen, mit denen Du Dein Ziel erreichen kannst.
Das hängt davon ab, was Dein Ziel ist, das hängt außerdem von Deinen Daten ab:
Wenn ich davon ausgehe, dass die Werte in der Spalte order_id eindeutig sind und Du den Namen haben möchtest der zu dem Datensatz gehört, dessen order_id den nächstgrößerern Wert als Deinen Vergleichswert hat, dann könntest Du dies zum Beispiel so erreichen
SELECT -- Gib mir
name -- die Namen
FROM -- aus
tabelle -- meiner Tabelle
WHERE -- wobei mich nur die Datensätze interessieren
order_id > vergleichswert -- deren order_id größer ist als mein Wert
ORDER BY -- sortiert
order_id -- nach der Spalte order_id
LIMIT -- und limitiere die Ergebnismenge
1 -- auf den ersten Datensatz
Schicker und verständlicher finde ich jedoch eine Umsetzung mit einer korrelierten Unterabfrage:
SELECT -- Gib mir
t1.name -- den Namen
FROM -- aus
tabelle t1 -- meiner Tabelle,
-- angesprochen unter dem Namen t1,
WHERE -- dessen
t1.order_id = ( -- order_id gleich dem
SELECT --
MIN(t2.order_id) -- minimalen Wert der Spalte order_id
FROM -- aus meiner
tabelle t2 -- Tabelle, diesmal mit t2 angesprochen,
WHERE -- ist, die
t2.order_id > vergleichswert -- größer sind als der Vergleichswert
)
Sofern Deine MySQL-Version keinen antiquarischen Wert besitzt, liefern Dir beide Statements den gleichen Wert. Nutze EXPLAIN, um herauszufinden, welches performanter ist.
Freundliche Grüße
Vinzenz
Hi!
Hallo, ich möchte den nächsthöheren Eintrag aus einer Mysql-DB ausgeben.
Die Daten liegen per Definition in ungeordneter Reihenfolge in einer Tabelle. Ein nächster oder vorhergehender Datensatz lässt sich erst nach einer Sortierung bestimmen.
SELECT name WHERE order_id is > $aktuelle_order_id LIMIT 1
So würde es gehen, oder gibt es einen speziellen Befehl für den Fall?
Das Sortieren solltest du noch hineinbringen (nebst FROM-Klause und das is entfernen). Eine Vereinfachung dazu gibt es nicht. Und diese Methode funktioniert natürlich nur, wenn order_id eindeutig (unique) ist.
Lo!
yo,
SELECT name WHERE order_id is > $aktuelle_order_id LIMIT 1
So würde es gehen, oder gibt es einen speziellen Befehl
für den Fall?
so geht es nicht, da die sortierung fehlt. rdbms sind mengenorientiert, srpich datensätze werden ohne eine bestimmte reihenfolge zurück geliefert, es sei den, man fügt die explizit eine ORDER BY klausel hinzu. bei dir werden alle datensätze zurück gegeben, die größer als die aktuelle_order_id sind (was immer das auch sein soll), aber die reihenfolge, wie diese datensätze zurückgegeben werden ist wahlfrei. zusätzlich zu beachten ist, dass LIMIT ein element nur von mysql ist, sprich deine abfrage ist nicht SQL Standard konform.
Ilja