2010-12-08 8 views
8

मुझे MySQL में पूर्णांक की श्रेणी का चयन करने की आवश्यकता है। इसMySQL में पूर्णांक की श्रेणी चुनें। उदाहरण के लिए। 1,2,3,4, ..., n;

SELECT RANGE(10,20) AS range;

रिटर्न

10, 11, 12, 13, 14, ..., 20

क्यों की तरह कुछ?
मैं जो अभी तक पंजीकृत नहीं है, वह सीमा से यादृच्छिक फोन नंबर का चयन करने के लिए चाहते हैं। यह विचार है।

SELECT RANGE(100000,999999) AS range FROM phone WHERE phoneNum <> range LIMIT FLOOR(100000 + RAND()*(899999);

+2

क्यों प्रोग्राम है जो एसक्यूएल प्रश्नों का इस्तेमाल कर रही है के भीतर यह नहीं? –

+0

क्या इसे हमेशा एक फोननंबर वापस करने की आवश्यकता होती है या क्या आप एक बार में 1000 नए फोननबर्स चुनने में सक्षम होना चाहते हैं? और क्या आपके पास कहीं पहले से ही "पहले से दिए गए" फोनेनबर्स की एक टेबल है? – thomaspaulb

उत्तर

8

आपकी क्वेरी के साथ कोई समस्या:

  1. आप कहां खंड में range उपयोग नहीं कर सकते। यह एक उपनाम है और WHERE क्लॉज के बाद ही परिभाषित किया जाएगा।
  2. यहां तक ​​कि अगर आप इसे इस्तेमाल कर सकते हैं, यह <> का उपयोग कर संख्या का एक सेट के साथ एक संख्या की तुलना करने कोई मतलब नहीं है। सामान्य तौर पर आप IN(...) इस्तेमाल कर सकते हैं, लेकिन आप विशेष मामले में आप BETWEEN 100000 and 999999 का उपयोग करें और एक RANGE समारोह के लिए की जरूरत से बचना चाहिए।
  3. यदि आप केवल एक नंबर चाहते हैं तो सीमा 1 होना चाहिए, यादृच्छिक कुछ नहीं। आम तौर पर यादृच्छिक वस्तुओं का चयन करने के लिए आप ORDER BY RAND() का उपयोग करते हैं।

इस क्वेरी का उपयोग कर प्रयास करें: आप एक नंबर अपनी तालिका में नहीं मिल चाहते हैं

SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd 
FROM phone 
WHERE phoneNum NOT BETWEEN 100000 AND 999999 
ORDER BY RAND() 
LIMIT 1 

और उपलब्ध संख्या की कमी के करीब नहीं हैं (जैसे कि 80% से कम आवंटित कर रहे हैं) एक अच्छा तरीका यादृच्छिक संख्याएं उत्पन्न करना होगा और जांचें कि उन्हें तब तक असाइन किया गया है जब तक कि आपको ऐसा कोई नहीं मिलता है।

एक शुद्ध MySQL समाधान हो सकता है मौजूद है, लेकिन मैं इसे की जरूरत है कुछ मुड़ मिलती है, यादृच्छिक और मापांक लगता है।

+0

क्या वह क्वेरी मौजूदा फोन नंबर नहीं लौटाएगी? उन्होंने यानी 'रेंज (100000,999999) से नंबर का चयन करें जहां मौजूद नहीं है, रेंज है कि तालिका में मौजूद नहीं है में एक यादृच्छिक मूल्य वापसी चाहता है (फोन से phoneNum का चयन करें जहां phoneNum = संख्या) रेंड द्वारा आदेश() सीमा 1' - अगर 'रेंज' ने फ्लाई – Rup

+0

@Rup पर संख्याओं की एक तालिका जेनरेट की है, तो अब आप इसे कहते हैं, यह समझ में आता है। मुझे अभी तक आवश्यकता को समझ में नहीं आया। –

+0

@Rup मुझे नहीं लगता कि यह फ्लाई पर उन तरह की तालिकाओं को उत्पन्न करने के लिए बहुत ही कुशल होगा। –

0

एक वैकल्पिक:

सबसे पहले 1 से केवल MAX_NUM के लिए सभी नंबरों को है कि सिर्फ संख्या के साथ एक मेज पैदा करते हैं।

SELECT n.id as newNumber 
FROM numbers AS n 
LEFT JOIN phone AS p 
    ON p.phoneNum = n.id 
WHERE 
    p.phoneNum IS NULL AND 
    n.id BETWEEN lowerLimit AND upperLIMIT  
ORDER BY RAND() 
LIMIT 1 

इस तरह आप भी सीमा मान बदलकर अपेक्षाकृत तेज से अधिक संख्या प्राप्त कर सकते हैं:

तो इस क्वेरी का उपयोग करें।

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