Mysql
 sql >> Database >  >> RDS >> Mysql

Come verificare se la riga corrente è l'ultima riga selezionata in una query sql?

  1. Devi specificare ORDER BY per definire un ordinamento delle righe.
  2. Credo che qualsiasi soluzione per MySQL significherebbe effettivamente che la tua query viene eseguita almeno due volte, quindi è davvero meglio farlo sul client.

Se sei d'accordo con l'esecuzione della stessa query due volte, fai qualcosa del genere.

Ottieni prima l'ID dell'ultima riga:

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

Usa quell'ID nella query principale:

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

Così com'è, molto probabilmente si interromperà se la tabella viene aggiornata durante l'esecuzione di queste due query (l'ID ricordato potrebbe non diventare l'ultimo se le righe vengono aggiunte o eliminate, a meno che tu non faccia qualcosa per risolvere questo problema).

Ovviamente puoi mettere tutto in una query:

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;

Devi verificare se MySQL è abbastanza intelligente da eseguire il SELECT LIMIT 1 interno solo una volta o lo eseguirà per ogni riga della tabella principale. Tuttavia, anche nel migliore dei casi, la query viene effettivamente eseguita due volte.