2010-10-18 15 views
6

मैं दो रिकॉर्ड प्रदर्शित करना चाहता हूं।mysql क्वेरी एक विशिष्ट पंक्ति और अन्य यादृच्छिक पंक्ति का चयन करने के लिए

उदाहरण के लिए select * FROM users WHERE user_id = 5

अब मैं चाहता हूँ एक और पंक्ति बेतरतीब ढंग से उन मेज से लेकिन user_id के साथ चयनित! = 5

यह संभव किसी एक क्वेरी में क्या करना है। मैंने यूनियन का उपयोग करने की कोशिश की लेकिन मुझे दो अलग-अलग पंक्तियां नहीं मिलीं।

धन्यवाद

उत्तर

7

यह मेरे लिए ठीक काम करता है की कोशिश करो। पहला परिणाम हमेशा आईडी 5 के साथ रिकॉर्ड होता है, दूसरी पंक्ति एक यादृच्छिक है। ध्यान दें कि यदि आईडी 5 के साथ कोई रिकॉर्ड मौजूद नहीं है, तो दोनों पंक्तियां यादृच्छिक होंगी।

SELECT * FROM users ORDER BY (user_id = 5) DESC, RAND() LIMIT 0,2 
+0

यह सही है, एक नहीं UNION +1 – Joony

+0

धन्यवाद pekka। मैंने आपकी क्वेरी की कोशिश की। यह बहुत अच्छा काम करता है। +1। अगर मेरे पास एक शर्त है तो क्या होगा। क्या मैं इसे वहां इस्तेमाल कर सकता हूं। उदाहरण के लिए चुनें * उपयोगकर्ताओं द्वारा ऑर्डर (अब() start_date और end_date के बीच) डीईएससी, रैंड() LIMIT 0,2 ?? – noobcode

+0

@noobcode सुनिश्चित करें कि आप क्या करना चाहते हैं इसके आधार पर। यादृच्छिक पंक्ति इस स्थिति से कवर नहीं की जाएगी –

0

इस

SELECT * FROM users WHERE user_id = 5 || user_id != 5 ORDER BY RAND() LIMIT 2 
+0

काम नहीं करेगा: जरूरी पहला परिणाम –

+0

के रूप में उपयोगकर्ता ID 5 देना नहीं होगा आह हाँ अपने सही :) –

0

संघ चाल करना चाहिए। आप शायद LIMIT भूल गए हैं।

(SELECT * FROM users WHERE user_id = 5 LIMIT 1) 
UNION 
(SELECT * FROM users WHERE user_id != 5 LIMIT 1) 
0

इस प्रयास करें:

SELECT * FROM users WHERE user_id=5 
union all (
    SELECT * FROM users WHERE user_id!=5 
    ORDER BY RAND() LIMIT 0,1) 
संबंधित मुद्दे