2011-06-24 61 views
6

Tôi có một bảng MySQL như thế này:Find tối thiểu không được sử dụng giá trị trong bảng mysql

+--------+-------+ 
| Server | Port | 
+--------+-------+ 
| 1  | 27001 | 
| 2  | 27002 | 
| 4  | 27004 | 
+--------+-------+ 

Làm thế nào bạn có thể nhìn thấy - ở đây là 27.003 cổng - nhưng nó đã bị xóa một số thời gian trước đây (chỉ là ví dụ).

Có cách nào để biết giá trị tối thiểu không được sử dụng (cao hơn 27000 ví dụ) trong bảng mysql không? Hoặc không có cách nào và tôi cần phải tạo một bảng riêng biệt với tất cả các cổng và cột có "đã sử dụng" hoặc "không được sử dụng"?

Giải thích tình huống: Tôi đang tạo trang web lưu trữ trò chơi và tôi có thể sử dụng tăng tự động cho cổng, nhưng tôi sẽ có nhiều cổng bị xóa/không sử dụng sau một thời gian và tôi muốn sử dụng tất cả chúng trước khi tăng cổng phạm vi.

Trả lời

12

Tìm kiếm nhanh trên Google cho "first missing number from sequence mysql" cho số this page of common MySQL queries.

Nó cho bạn thấy làm thế nào để find the first missing number from a sequence:

Bạn có một chén bảng (id int) với các giá trị (1,2,4,18,19,20,21), và bạn muốn tìm ra đầu tiên thiếu số theo thứ tự của các giá trị id:

SELECT t1.id+1 AS Missing 
FROM tbl AS t1 
LEFT JOIN tbl AS t2 ON t1.id+1 = t2.id 
WHERE t2.id IS NULL 
ORDER BY t1.id LIMIT 1; 

+---------+ 
| Missing | 
+---------+ 
|  3 | 
+---------+ 

Disclaimer: Không thử nghiệm cá nhân.

+0

Chuỗi cuối cùng phải là: "ORDER BY t1.id LIMIT 1;", nhưng vẫn cảm ơn! – splattru

+0

cảm ơn, tôi đã cập nhật câu trả lời – Caspar

1
SELECT * 
FROM tableName t, (SELECT @last:= NULL) dm 
WHERE (@last:= IF(@last IS NULL OR @last + 1 = ID, ID, NULL)) IS NULL 
ORDER BY ID 
LIMIT 1 
+0

tôi thích cách tiếp cận này :) –

Các vấn đề liên quan