2011-06-24 16 views
6

में मान उपयोग नहीं मैं इस तरह एक MySQL तालिका है:ढूँढें न्यूनतम mysql तालिका

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

आप कैसे देख सकते हैं - यहां 27003 बंदरगाह था - लेकिन यह कुछ समय पहले हटा दिया गया था (सिर्फ उदाहरण के लिए)।

क्या न्यूनतम मूल्य का उपयोग करने का कोई तरीका है जिसका उपयोग (उदाहरण के लिए 27000 से अधिक नहीं) mysql तालिका में नहीं किया जाता है? या कोई रास्ता नहीं है और मुझे "प्रयुक्त" या "उपयोग नहीं किए गए" के साथ सभी बंदरगाहों और स्तंभ के साथ एक अलग तालिका बनाने की आवश्यकता है?

स्थिति स्पष्टीकरण: मैं गेम होस्टिंग वेबसाइट बना रहा हूं, और मैं बंदरगाहों के लिए ऑटो-वृद्धि का उपयोग कर सकता हूं, लेकिन मेरे पास कुछ समय बाद बहुत सारे हटाए गए/अप्रयुक्त बंदरगाह होंगे, और मैं पोर्ट को बढ़ाने से पहले उन सभी का उपयोग करना चाहता हूं रेंज।

उत्तर

12

"first missing number from sequence mysql" के लिए Google पर एक त्वरित खोज this page of common MySQL queries देता है।

यह आप कैसे करने के लिए find the first missing number from a sequence पता चलता है:

आप मूल्यों (1,2,4,18,19,20,21) के साथ एक मेज tbl (आईडी int) है, और आप पहले पता लगाने के लिए चाहते हैं आईडी मूल्यों के अपने क्रम में लापता संख्या:

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

अस्वीकरण: व्यक्तिगत रूप से परीक्षण किया नहीं।

+0

अंतिम स्ट्रिंग होना चाहिए: "t1.id LIMIT 1 द्वारा आदेश;", लेकिन वैसे भी धन्यवाद! – splattru

+0

धन्यवाद, मैंने जवाब – 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

अद्यतन किया है मुझे यह दृष्टिकोण पसंद है :) –

संबंधित मुद्दे