Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie überprüfe ich, ob die aktuelle Zeile die letzte ausgewählte Zeile in einer SQL-Abfrage ist?

  1. Sie müssen ORDER BY angeben um eine Sortierung der Zeilen zu definieren.
  2. Ich glaube, jede Lösung für MySQL würde effektiv bedeuten, dass Ihre Abfrage mindestens zweimal ausgeführt wird, also ist es wirklich besser, dies auf dem Client zu tun.

Wenn Sie damit einverstanden sind, dieselbe Abfrage zweimal auszuführen, dann tun Sie so etwas.

Holen Sie sich zuerst die ID der letzten Zeile:

SELECT @LastID := ID 
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;

Verwenden Sie diese ID in der Hauptabfrage:

SELECT * 
    , CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID ASC;

So wie es ist, wird es höchstwahrscheinlich brechen, wenn die Tabelle aktualisiert wird, während diese beiden Abfragen ausgeführt werden (die gespeicherte ID wird möglicherweise nicht die letzte, wenn Zeilen hinzugefügt oder gelöscht werden, es sei denn, Sie unternehmen etwas, um dieses Problem zu beheben).

Natürlich können Sie alles in eine Abfrage packen:

SELECT 
    *, 
    CASE WHEN ID = LastID THEN FALSE ELSE TRUE END AS IsLast
FROM 
    YourTable
    CROSS JOIN 
    (
        SELECT ID AS LastID
        FROM YourTable
        ORDER BY ID DESC
        LIMIT 1
    ) AS TableLastID
ORDER BY ID ASC;

Sie müssen überprüfen, ob MySQL intelligent genug ist, um das innere SELECT LIMIT 1 auszuführen nur einmal oder es wird für jede Zeile der Haupttabelle ausgeführt. Trotzdem wird die Abfrage selbst im besten Fall effektiv zweimal ausgeführt.