Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn một hàng cùng với các hàng tiếp theo và trước đó của nó

Điều này phức tạp, vì bạn đang chọn một hàng theo id , nhưng chọn những cái liền kề bởi một trường khác, modified_time .

Ý tưởng là sử dụng các biến để liệt kê các hàng. Và, sử dụng một hàng khác để tính giá trị cho id mà bạn quan tâm. Thực hiện việc này trong một truy vấn con, sau đó chọn các hàng bạn muốn:

SELECT t.*
FROM (SELECT `id`,
              @rn := if(@rnid := if(t.id  = '".id."', @rn + 1, @rnid),
                        @rn + 1, @rn + 1
                       ) as rn
      FROM {#table} t       
           "other_part_of_query" cross join
           (select @rn := 0, @rnid := 0) vars
      ORDER BY `modified_time` DESC
     ) t
WHERE rn in (@rnid - 1, @rnid, @rn)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểu dữ liệu MySQL INT (11) trong khi UNSIGNED INT (10)?

  2. Thứ tự Laravel theo mối quan hệ hasmany

  3. Làm thế nào để chuyển đổi tất cả các bảng trong cơ sở dữ liệu thành một đối chiếu?

  4. Thiếu kết nối cơ sở dữ liệu Mysql và thiếu mysql.sock

  5. Mysql tham gia bên trái với điều kiện trong bảng bên phải