Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak sprawdzić, czy bieżący wiersz jest ostatnim wybranym wierszem w zapytaniu sql?

  1. Musisz określić ORDER BY zdefiniować sortowanie wierszy.
  2. Uważam, że każde rozwiązanie dla MySQL oznaczałoby, że Twoje zapytanie zostanie wykonane co najmniej dwa razy, więc naprawdę lepiej zrobić to na kliencie.

Jeśli nie masz nic przeciwko dwukrotnemu uruchomieniu tego samego zapytania, zrób coś takiego.

Najpierw pobierz identyfikator ostatniego wiersza:

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

Użyj tego identyfikatora w głównym zapytaniu:

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

Tak jak jest, najprawdopodobniej pęknie, jeśli tabela zostanie zaktualizowana podczas działania tych dwóch zapytań (zapamiętany identyfikator może nie stać się ostatnim, jeśli wiersze zostaną dodane lub usunięte, chyba że zrobisz coś, aby rozwiązać ten problem).

Oczywiście możesz umieścić to wszystko w jednym zapytaniu:

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;

Musisz sprawdzić, czy MySQL jest wystarczająco inteligentny, aby uruchomić wewnętrzne SELECT LIMIT 1 tylko raz lub uruchomi go dla każdego wiersza tabeli głównej. Mimo to, nawet w najlepszym przypadku zapytanie jest skutecznie wykonywane dwukrotnie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd:Fill:Właściwość SelectCommand.Connection nie została zainicjowana.

  2. Dlaczego funkcja PHP crypt() zwraca to samo dla dwóch różnych ciągów?

  3. W klauzuli dla listy par warunków

  4. Jak zabezpieczyć plik konfiguracyjny bazy danych w projekcie?

  5. Zmienne MySQL w skrypcie ALTER TABLE