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

Có giải pháp thay thế cho IN với LIMIT không?

DELETE FROM Highscore ORDER BY value DESC LIMIT 10,5

5 cuối cùng đó có thể là bất kỳ số nào. Nếu bạn chạy điều này mỗi khi một điểm được thêm vào, bạn có thể có nó dưới dạng 1 . Để có nhiều sai số hơn, hãy sử dụng 10 .

CHỈNH SỬA:Xin lỗi, rõ ràng là bạn không thể sử dụng phần bù ở đây. Trong trường hợp đó:

DELETE FROM Highscore WHERE value < (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)

Nếu nó không cho phép bạn làm điều đó (chọn từ cùng một bảng làm cập nhật / xóa), hãy thử:

SET @tmp = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value < @tmp

CHỈNH SỬA một lần nữa:Như đã chỉ ra trong nhận xét, gây ra vấn đề nếu giá trị 11 bằng 10. Hãy thử:

SET @id = (SELECT scoreId FROM Highscore ORDER BY value DESC, scoreId DESC LIMIT 10,1), @val = (SELECT value FROM Highscore ORDER BY value DESC LIMIT 10,1)
DELETE FROM Highscore WHERE value <= @val AND scoreId < @id

Sắp xếp thứ tự theo điểm số trong biến đầu tiên đảm bảo rằng khi có một số điểm có cùng điểm số thì sẽ không có ít hơn 10 điểm ở đó.



  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ảo mật mật khẩu DB trong php

  2. Có tùy chọn / tính năng MySQL để theo dõi lịch sử các thay đổi đối với bản ghi không?

  3. chọn tất cả các bản ghi được tạo trong giờ

  4. Truy vấn yêu cầu kết bạn đang chờ xử lý cho bảng bạn bè và lấy dữ liệu từ các bảng khác

  5. PDO từ chối xóa một hàng dữ liệu (trong bảng cụ thể)