Sunday, 15 February 2015

sql - MySQL: Alternatives to ORDER BY RAND() -


मैंने MySQL के ORDER BY RAND () फ़ंक्शन पर कुछ विकल्प पढ़ा है, लेकिन अधिकांश विकल्प का केवल एक यादृच्छिक परिणाम की आवश्यकता है, जहां पर लागू होते हैं।

क्या किसी को कोई भी विचार है कि एक क्वेरी को अनुकूलित करने का तरीका क्या है जो कई यादृच्छिक परिणाम देता है, जैसे कि:

  का चयन करें यू.आई.डी., पी.फ़ोटो यूजर यू से, प्रोफाइल पी WHERE p.memberid = u.id और p.photo! = '' AND (u.ownership = 1 या u.stamp = 1) आदेश द्वारा रैंड () सीमा 18  

यह एक विकल्प है, लेकिन यह अभी भी RAND () का उपयोग करने पर आधारित है:

  SELECT u.id , पी। फोटो, राउण्ड (रैंड (* * x.m_id) 'प्रयोक्ता यू, प्रोफाइल पी, (चयन MAX (टी.आईडी)' एम_आईड 'से उपयोगकर्ता टी) एक्स जहां पी। मेम्बरिड = यूआईड और P.photo! = '' AND (u.ownership = 1 या u.stamp = 1) ORDER द्वारा rand_ind LIMIT 18  

यह थोड़ा अधिक जटिल है, लेकिन random_ind का बेहतर वितरण प्रदान करता है मान:

  SELECT u.id, p.photo, FLOOR (1 + RAND () * x.m_id) 'rand_ind' उपयोगकर्ता से, प्रोफाइल पी, (चयन करें MAX (टी.आईडी) - 1 'एम_आईडी' से उपयोगकर्ता टी) x जहां पी। मेम्बरिड = यू.आईडी और पी.फोटो! = '' और (यू.नरशिप = 1 या यू.स्टैम्प = 1 ) आदेश रैंड_आईडी LIMIT 18  
द्वारा

No comments:

Post a Comment