Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vérifier si la ligne actuelle est la dernière ligne sélectionnée dans une requête SQL ?

  1. Vous devez spécifier ORDER BY pour définir un tri des lignes.
  2. Je crois que toute solution pour MySQL signifierait effectivement que votre requête est exécutée au moins deux fois, il est donc vraiment préférable de le faire sur le client.

Si vous êtes d'accord pour exécuter la même requête deux fois, faites quelque chose comme ça.

Obtenez d'abord l'ID de la dernière ligne :

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

Utilisez cet ID dans la requête principale :

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

En l'état, il est fort probable qu'il se cassera si la table est mise à jour pendant l'exécution de ces deux requêtes (l'ID mémorisé peut ne pas être le dernier si des lignes sont ajoutées ou supprimées, à moins que vous ne fassiez quelque chose pour résoudre ce problème).

Bien sûr, vous pouvez tout mettre en une seule requête :

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;

Vous devez vérifier si MySQL est assez intelligent pour exécuter le SELECT LIMIT 1 interne une seule fois ou il l'exécutera pour chaque ligne de la table principale. Pourtant, même dans le meilleur des cas, la requête est effectivement exécutée deux fois.