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

Chọn một hàng và các hàng xung quanh nó

Chỉ một ORDER BY mệnh đề có thể được định nghĩa cho một UNION 'd truy vấn. Không thành vấn đề nếu bạn sử dụng UNION hoặc UNION ALL . MySQL không hỗ trợ LIMIT mệnh đề trên các phần của UNION 'd truy vấn, nhưng nó tương đối vô dụng nếu không có khả năng xác định thứ tự.

MySQL cũng thiếu các chức năng xếp hạng, mà bạn cần phải xử lý các khoảng trống trong dữ liệu (bị thiếu do các mục nhập bị xóa). Cách thay thế duy nhất là sử dụng một biến tăng dần trong câu lệnh SELECT:

SELECT t.id, 
       @rownum := @rownum+1 as rownum 
  FROM MEDIA t, (SELECT @rownum := 0) r

Bây giờ chúng ta có thể nhận được danh sách các hàng được đánh số liên tục, vì vậy chúng ta có thể sử dụng:

WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2) 
                 AND @midpoint - ROUND(@midpoint/2) [email protected]

Sử dụng 7 làm giá trị cho @midpoint, @midpoint - ROUND(@midpoint/2) trả về giá trị 4 . Để có tổng cộng 10 hàng, hãy đặt giá trị @upperlimit thành 10. Đây là truy vấn đầy đủ:

SELECT x.* 
  FROM (SELECT t.id, 
               @rownum := @rownum+1 as rownum 
          FROM MEDIA t, 
               (SELECT @rownum := 0) r) x
 WHERE x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit

Nhưng nếu bạn vẫn muốn sử dụng LIMIT , bạn có thể sử dụng:

  SELECT x.* 
    FROM (SELECT t.id, 
                 @rownum := @rownum+1 as rownum 
            FROM MEDIA t, 
                 (SELECT @rownum := 0) r) x
   WHERE x.rownum >= @midpoint - ROUND(@midpoint/2)
ORDER BY x.id ASC
   LIMIT 10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buộc người dùng có phiên bản ứng dụng Android mới nhất

  2. Tạo một bài đăng có liên quan hoặc tương tự bằng PHP &MySQL

  3. Mục đích của character_set_connection là gì?

  4. Bao gồm các kết quả rỗng trong group_concat

  5. Làm thế nào để sửa lỗi giá trị chuỗi không chính xác?