2010-07-09 11 views
10

अगर मैंएक mysql क्वेरी में पहली पंक्ति हथियाने केवल

select * from tbl_foo where name = 'sarmen' 

के रूप में एक क्वेरी जैसे था और इस तालिका कैसे मैं प्रत्येक पंक्ति के लगभग असाइन पंक्ति संख्या के बिना एक बनाने के लिए कर सकते हैं नाम = Sarmen के अनेक उदाहरण हैं कॉलम कि ऑटो संस्कार? मेरे पास ऐसा करने का एक कारण है जो मैं कर रहा हूं और मेरे उदाहरण में auto_incrimented col की आवश्यकता नहीं है।

इसलिए यदि प्रत्येक पंक्ति एसक्यूएल के माध्यम से वर्चुअल पंक्ति संख्या असाइन करती है या शायद php मैं पहली पंक्ति या अंतिम पंक्ति को किसी भी समय प्रिंट करने में सक्षम हो जाऊंगा।

thnx

उत्तर

16

वापस जाने के लिए केवल एक पंक्ति का उपयोग LIMIT 1:

SELECT * 
FROM tbl_foo 
WHERE name = 'sarmen' 
LIMIT 1 

में समझ में आता है नहीं है जब तक आप एक ORDER BY खंड है कहने के लिए 'पहली पंक्ति' या 'अंतिम पंक्ति'। आप एक ORDER BY खंड जोड़ने मान लिया जाये तो आप निम्न तरीकों से सीमा का उपयोग कर सकते हैं:

  • प्राप्त करने के लिए पहली पंक्ति का उपयोग LIMIT 1
  • दूसरी पंक्ति प्राप्त करने के लिए आप ऑफ़सेट के साथ सीमा का उपयोग कर सकते हैं: LIMIT 1, 1
  • अंतिम पंक्ति को ऑर्डर बदलने के लिए (एएससी को डीईएससी या इसके विपरीत में बदलें) तो LIMIT 1 का उपयोग करें।
+0

वास्तव में 3 पंक्ति हो रही है, यह समझ में 'अंतिम पंक्ति' और का उल्लेख करने के पड़ता है 'पहली पंक्ति।' आपको बस डेटाबेस के बारे में कुछ चीजों को समझना होगा। इस तथ्य की तरह कि आपको ऑर्डर का उपयोग करना चाहिए यदि आपको किसी निश्चित फैशन में सॉर्ट किए जाने वाले परिणाम सेट की आवश्यकता है। –

+2

@ जॉर्ज मैरियन: हां, यही कारण है कि मैंने लिखा "जब तक आपके पास क्लॉज द्वारा ऑर्डर नहीं किया जाता"। –

+0

मेरा मतलब था कि आपके उत्तर के विस्तार के रूप में और केवल एक उदाहरण प्रदान किया गया: वही प्रदान किया गया है। उस ने कहा, परिणाम सेट पंक्तियों के रूप में दर्शाया गया है, कोई फर्क नहीं पड़ता कि आदेश क्या है। हमें परिणाम सेट और तालिका के बीच अंतर को समझने की आवश्यकता है। मुझे बहुत अच्छी तरह से परवाह नहीं है कि वे किस क्रम में हैं, लेकिन फिर भी उस परिणाम सेट की पहली या आखिरी पंक्ति का उल्लेख करना चाहते हैं।Pedantic होने के लिए मेरी माफ़ी, लेकिन यह हमारे उद्योग में आम तौर पर आवश्यक है। –

-1

उपयोग pseudocolumn ROWNUM

+4

यह ओरेकल के लिए काम करेगा, MySQL –

+1

हाँ - मैं निश्चित रूप से एक ओरेकल लड़का हूं - क्षमा करें – Randy

5

आप निर्दिष्ट नहीं किया है कि कैसे क्रम निर्धारित किया जाता है, लेकिन यह आप MySQL में एक रैंक मान दे देंगे:

SELECT t.*, 
     @rownum := @rownum +1 AS rank 
    FROM TBL_FOO t 
    JOIN (SELECT @rownum := 0) r 
WHERE t.name = 'sarmen' 

तो फिर तुम क्या पंक्तियों बाहर ले सकते हैं रैंक वैल्यू के आधार पर आप चाहते हैं।

+0

धन्यवाद, इस प्रकार की क्वेरी क्या है जिसे मैं इसके बारे में अधिक जानना चाहता हूं – eminem

+0

मैंने कोशिश की लेकिन वर्चुअल रैंक कॉलम आया बाहर शून्य शायद मैं एक प्रश्न कर सकता हूं और प्रत्येक पंक्ति को सरणी में जोड़ सकता हूं और 0 वां आइटम प्राप्त कर सकता हूं? (PHP का उपयोग करके) – eminem

+0

@eminem: अद्यतन क्वेरी, अभी आज़माएं। इसे सीखने के लिए - यह एक हैक है जब तक MySQL विश्लेषणात्मक/रैंक/विंडोिंग फ़ंक्शंस का समर्थन नहीं करता है। –

0

आप का उपयोग कर एक विशिष्ट नाम युक्त पंक्तियों की कुल संख्या प्राप्त कर सकते हैं:

SELECT * FROM tbl_foo WHERE name = 'sarmen' LIMIT (n - 1), 1 

कहाँ 1 = < n:

SELECT COUNT(*) FROM tbl_foo WHERE name = 'sarmen' 

गिनती देखते हुए, आप अब वें पंक्ति का उपयोग कर प्राप्त कर सकते हैं पहली क्वेरी से < = COUNT (*)।

उदाहरण:

SELECT * FROM tbl_foo WHERE name = 'sarmen' LIMIT 2, 1 
संबंधित मुद्दे