2011-06-24 28 views
6

değeri kullanılmaz:Bul asgari Böyle bir MySQL tablo var mysql tabloda

Gördüğünüz nasıl
+--------+-------+ 
| Server | Port | 
+--------+-------+ 
| 1  | 27001 | 
| 2  | 27002 | 
| 4  | 27004 | 
+--------+-------+ 

- Burada 27.003 liman oldu - ama bir süre önce silindi (sadece örneğin).

Mysql tablosunda (örneğin 27000'den yüksek) kullanılmayan minimum değeri bilmenin bir yolu var mı? Ya da hiçbir yolu yoktur ve "kullanılmış" veya "kullanılmamış" ile tüm bağlantı noktaları ve sütun ile ayrı bir tablo yapmak gerekir?

Durum açıklaması: Oyun barındırma web sitesi oluşturuyorum ve bağlantı noktaları için otomatik artış özelliğini kullanabilirim, ancak bir süre sonra çok fazla silinen/kullanılmayan bağlantı noktası olacak ve bağlantı noktasını artırmadan önce hepsini kullanmak istiyorum aralık.

cevap

12

"first missing number from sequence mysql" için Google'da hızlı bir arama, this page of common MySQL queries verir.

O nasıl find the first missing number from a sequence gösterir: Sen değerler (1,2,4,18,19,20,21) ile bir masa tbl (id int) sahip

ve ilk bulmak istediğiniz id değerlerinin kendi sırayla numarası eksik:

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 | 
+---------+ 

Yasal Uyarı: bizzat test edilmedi.

+0

Sonuncu dize şöyle olmalıdır: "SIPARIŞ t1.id LIMIT 1;", ama yine de teşekkürler! – splattru

+0

teşekkürler, bu yaklaşımı beğendim – 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

cevabını güncelledim :) –