2010-10-01 13 views
5

से परिणाम जोड़ें I मेरे पास 9 पंक्तियों वाली एक तालिका है।* tbl से चुनें जहां आईडी> = 5/* फिर आईडी <5 से क्वेरी */

$ आईडी = 5
यदि मैं SELECT * FROM tbl WHERE id>=$id का उपयोग करता हूं तो मुझे 5,6,7,8,9 पंक्तियां मिलती हैं। इस प्रश्न के लिए मैं SELECT * FROM tbl WHERE id<$id का परिणाम जोड़ना चाहता हूं, इसलिए मुझे अंतिम 5,6,7,8,9,1,2,3,4 पंक्तियां मिलेंगी।

यह डेटाबेस में दो बार जाने से बचने के लिए है तो परिणाम सेट php में जोड़ें।

संपादित करें: हाँ आदेश महत्वपूर्ण है। तेजी से प्रतिक्रिया के लिए धन्यवाद दोस्तों। सबसे अच्छे उत्तरों के लिए @knittl (स्वीकृत उत्तर) और @Swanand धन्यवाद।

+0

यह आदेश आप के लिए देख रहे हैं? – Swanand

+0

तो, आईडी> = $ आईडी या आईडी <$ आईडी। यह हर पंक्ति है ... – knittl

+3

@knittl - यदि 'id' में nulls हो सकता है तो यह नहीं है। –

उत्तर

6

आप सभी पंक्तियों करना चाहते हैं? अगर आदेश आप के लिए क्या देख रहे है, तरह अपने परिणाम सेट:

SELECT * FROM tbl 
ORDER BY id >= $id DESC, id ASC 
+1

क्या यह MySQL में काम करता है? बस इसके साथ प्रयास किया: 'आईडी द्वारा आदेश> = @id, id', ऐसा प्रतीत नहीं होता है। मुझे यकीन है कि मुझे कुछ याद आ रही है। संपादित करें: मैं देखता हूं, 'डीईएससी' ने चाल की है। मुझसे +1 – Swanand

+0

यह करता है, मैंने अभी परीक्षण किया है। @id सेट है? एक शाब्दिक मान – knittl

-1

UNION आपका मित्र है!

(SELECT *,1 as q FROM tbl WHERE id>=$id) 
UNION 
(SELECT *,2 as q FROM tbl WHERE id<$id) 
ORDER BY q, id; 
+2

यूनियन आदेश – knittl

+1

mysql दस्तावेज़ों को उद्धृत करने की गारंटी नहीं देता है: »हालांकि, व्यक्तिगत चयन विवरणों के लिए ORDER BY का उपयोग उस क्रम के बारे में कुछ भी नहीं है जिसमें अंतिम परिणाम में पंक्तियां दिखाई देती हैं क्योंकि डिफ़ॉल्ट रूप से यूनियन पंक्तियों का एक असाधारण सेट उत्पन्न करता है।« – knittl

+0

@knittl आप सही हैं। मुझे परिणामों के आदेश के बारे में बहुत ज्यादा परवाह नहीं था क्योंकि प्रश्नों ने इसके बारे में कुछ भी नहीं कहा था (उल्लिखित प्रश्न किसी भी आदेश की गारंटी नहीं देते हैं)। मैंने अब इस अतिरिक्त आवश्यकता को पूरा करने के लिए अपना जवाब अपडेट कर लिया है। इस बहुत ही सरल मामले के लिए, आपका उत्तर अभी भी अधिक कुशल है। अधिक जटिल परिदृश्यों में, निरंतर ('q') काम में आ सकता है (मेरी हार्ड-रॉकिंग अमीगो) हालांकि। – sfussenegger

-1

कोशिश

$id=5; 
SELECT * FROM tbl WHERE id>=$id 
union 
SELECT * FROM tbl WHERE id<$id ; 
+0

अच्छा ... हाँ, लेकिन यह बिल्कुल वैसा ही है ... चुनें * tbl – Gimly

+3

@Gimly - बिल्कुल नहीं। यह 'चयन * के रूप में वही है जहां आईडी शून्य नहीं है –

+0

या मेरे पेडेंट्री को एक कदम आगे ले जाने के लिए यह वास्तव में 'SELECT DISTINCT * tbl से है जहां आईडी शून्य नहीं है –

1

कुछ इस तरह का प्रयास करें ...

SELECT *, (IF(id<5, true,false)) AS ltfive 
FROM mytable 
ORDER BY ltfive, id 
+0

का उपयोग करने का प्रयास करें, आप भाग से – knittl

+0

@knittle - ओह हाँ खो रहे हैं। मैं इसे ठीक कर दूंगा (नहीं कि यह उत्तर का एक प्रासंगिक हिस्सा था) – Spudley

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