Vinzenz Mai: MySql

Beitrag lesen

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