Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да проверя дали текущият ред е последният избран ред в sql заявка?

  1. Трябва да посочите ORDER BY да дефинира някакво сортиране на редовете.
  2. Вярвам, че всяко решение за MySQL ефективно би означавало, че вашата заявка се изпълнява поне два пъти, така че наистина е по-добре да го направите на клиента.

Ако сте готови да изпълнявате една и съща заявка два пъти, направете нещо подобно.

Първо вземете идентификатора на последния ред:

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

Използвайте този идентификатор в основната заявка:

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

Както е, най-вероятно ще се повреди, ако таблицата се актуализира, докато се изпълняват тези две заявки (запомненият идентификатор може да не стане последният, ако се добавят или изтриват редове, освен ако не направите нещо, за да разрешите този проблем).

Разбира се, можете да поставите всичко в една заявка:

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;

Трябва да проверите дали MySQL е достатъчно умен, за да изпълни вътрешния SELECT LIMIT 1 само веднъж или ще го изпълни за всеки ред от основната таблица. Въпреки това, дори и в най-добрия случай, заявката се изпълнява ефективно два пъти.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпращане на известие от Firesbase до множество потребители

  2. MYSQL показва 0, дори ако резултатите не съществуват

  3. AWS rds - Как да чета от прочетена реплика в Java приложение?

  4. Как да инсталирате и конфигурирате phpMyAdmin на CentOS 6

  5. Проблем с автоматично увеличаваща се колона с id