2011-08-20 18 views
7

ऐसा लगता है कि रैंड मुझे चाहिए, लेकिन मुझे यह समझने में थोड़ा परेशानी हो रही है कि यह कैसे काम करता है।मैं mysql में एक यादृच्छिक मान कैसे डालूं?

मुझे 60 और 120 के बीच एक यादृच्छिक संख्या दो हजार पंक्तियों में डालने की आवश्यकता है। तालिका का नाम है: लिस्टिंग और कॉलम नाम है:

क्या आप कृपया मदद कर सकते हैं?

SELECT FLOOR(60 + RAND() * 61); 

तो क्या यहाँ हो रहा है:

उत्तर

21

60 और 120 के बीच एक यादृच्छिक पूर्णांक बनाने के लिए, आप RAND() के परिणाम है, जो केवल चल बिन्दु मान का उत्पादन के साथ गणित का एक सा सब करने की ज़रूरत

RAND()0.847269199 जैसे मान का उत्पादन करेगा। हम उस 61 से गुणा करते हैं, जो हमें 51.83615194 मान देता है। हम 60 जोड़ते हैं, क्योंकि यह शून्य से ऊपर वांछित ऑफसेट है (111.83615194)। FLOOR() पूरी चीज को निकटतम पूर्ण संख्या तक ले जाती है। अंत में, आप 111.

कुछ हजार मौजूदा पंक्तियों पर ऐसा करने के लिए है:

UPDATE table SET randcolumn = FLOOR(60 + RAND() * 61) WHERE (<some condition if necessary>); 

अधिक उदाहरण के लिए the MySQL docs on RAND() देखें।

नोट मुझे लगता है कि मैं गणित का अधिकार है, लेकिन अगर आप की उम्मीद सीमा के बाहर 59 या 121 के मूल्यों को प्राप्त, +60 ऊपर या नीचे तदनुसार बदल जाते हैं।

+0

यह केवल [0; 120) में संख्याएं उत्पन्न करेगा - आपको 61 से गुणा करने की आवश्यकता है। – emboss

+0

@emboss यह [60: 119], [0: 120] नहीं है, लेकिन आप इसके बारे में सही हैं 61 गुणक –

+0

ओह, हाँ :) मैं इसे सही कर दूंगा ... लगता है कि मैं अब और नहीं कर सकता। – emboss

3

यहां एक श्रेणी में यादृच्छिक संख्या कैसे प्राप्त करें। निम्नलिखित थोड़ा सा अस्पष्ट हो सकता है क्योंकि 61 वास्तव में आपका अधिकतम मूल्य (120) आपके न्यूनतम मूल्य (60) + 1 को समावेशी परिणाम प्राप्त करने के लिए घटा देता है।

SELECT FLOOR(60 + (RAND() * 61)); 

SELECT FLOOR(MIN_Value + (RAND() * (MAX_Value - MIN_Value) + 1); 

http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand

1
UPDATE X SET C = FLOOR(61 * RAND() + 60) WHERE ...; 

(60 और 120 सहित) 60 और 120 के बीच की संख्या प्राप्त करने के लिए;

RAND() अंतराल [0; 1) (जो 1 को छोड़कर) में एक संख्या बनाता है। तो 61 * रैंड() एक संख्या उत्पन्न करता है [0, 61)। 61 * रैंड() +60 में है [60; 121) नीचे घूमकर आप सुनिश्चित करते हैं कि आपका नंबर वास्तव में [60; 120] में है।

0

जब मैं इस मुद्दे को इस तरह का सामना करना पड़ा, मैं मैनुअल की कोशिश की, लेकिन मैं 500 से अधिक लाइनों, मैं तार्किक एक चाल जो मुझे मदद मिली लाया, क्योंकि यदि आप क्वेरी पर रैंड चलाने के लिए, आप ऊपर त्रुटि रिपोर्ट की वजह से हो रही अंत हो सकता है है डुप्लीकेट्स, या प्राथमिक कुंजी समस्या, विशेष रूप से यदि वह कॉलम PRIMARY KEY और AUTO INCREMENT है।

  1. सबसे पहले - मैं प्रश्न में, जैसे कॉलम का नाम बदलकर> आईडीएस
  2. दूसरी बात - - मैं एक स्तंभ बनाया है और कहा जाता है कि यह आईडी
  3. तीसरा - मेरा आईडी था मैं इस कोड भाग गया

अद्यतन इतिहास सेट आईडी = मंजिल (217 + रैंड() * 2161)

इसने एक यादृच्छिक संख्या स्वचालित रूप से बनाई, बाद में मैंने नामित आईडीएस कॉलम

012 हटा दिया

माइकल से क्रेडिट। धन्यवाद

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