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

SQL:Намерете следващия ред в клауза where с идентификатор

Трябва да имате препратка към текущия запис и след това постепенно да търсите следващия запис въз основа на сортираните колони. Примерът по-долу предполага, че е сортиран на

ORDER BY Active, DIN, NAME

Първо:

SELECT *
FROM TABLE
WHERE NAME LIKE '%X%' AND DIN LIKE '%%'
ORDER BY Active, DIN, Name
LIMIT 1;

Следващо:(уверете се, че сте разделили CURR.ID = 6 и И-ИЛИ с правилни скоби! )

SELECT *
FROM TABLE T
INNER JOIN TABLE CURR ON CURR.ID = 6 # the current ID being viewed
   AND ((T.Active = Curr.Active AND T.DIN = Curr.DIN AND T.NAME > Curr.Name)
     OR (T.Active = Curr.Active AND T.DIN > Curr.DIN)
     OR T.Active > Curr.Active)
WHERE T.NAME LIKE '%X%' AND T.DIN LIKE '%%'
ORDER BY T.Active, T.DIN, T.Name
LIMIT 1;

Работна извадка, представена по-долу

create table products
(ID int, SEED int, NAME varchar(20), DIN varchar(10), ACTIVE int, DELETED int);
insert products values
(1,  0,    'Product #1', '004812', 1,    0),
(2,  0,    'Product #2', '004942', 0,    0),
(3,  0,    'Product #3', '004966', 1,    0),
(4,  0,    'Product #4', '007437', 1,    1),
(5,  2,    'Product #2', '004944', 0,    0),
(6,  2,    'Product #2', '004944', 1,    0);

SELECT *
FROM products
WHERE active = 1 AND deleted = 0
ORDER BY din DESC, ID desc;

Output:
"ID";"SEED";"NAME";"DIN";"ACTIVE";"DELETED"
"3";"0";"Product #3";"004966";"1";"0"
"6";"2";"Product #2";"004944";"1";"0"
"1";"0";"Product #1";"004812";"1";"0"

Ако текущият е редът с ID=6, следващият запис може да бъде извлечен с помощта на

SELECT T.*
FROM products T
INNER JOIN products curr on curr.ID = 6
   AND ((T.din = curr.din and T.ID > curr.ID)
    OR (T.din < curr.din))
WHERE T.active = 1 AND T.deleted = 0
ORDER BY T.din DESC, T.ID ASC
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. MySQL автоматично съхранява дата и час за всеки ред

  2. Логически проблем на MySQL LEFT JOIN на множество таблици

  3. Mysql2::Грешка:Достъпът е отказан за потребител 'test'@'localhost' до база данни 'depot_test'

  4. Какъв тип/дължина на колона трябва да използвам за съхраняване на хеширана парола на Bcrypt в база данни?

  5. Как да използвате ORDER BY вътре в UNION