मैं ने MySQL बयान है कि सभी पंक्तियों का चयन करेंगे, साथ ही कितने कुल पंक्तियों को देखते हैं की जरूरत है।
जब शाब्दिक रूप से लिया गया, तो यह संभव नहीं है। एक SQL क्वेरी का परिणाम एक (आभासी) तालिका है; उस परिणाम तालिका में प्रत्येक पंक्ति में स्तंभ केवल उस पंक्ति से जुड़ा एक मान प्रदान करता है, और पंक्तियां एक दूसरे से स्वतंत्र होती हैं।
पूरे परिणाम की पंक्ति गणना को पकड़ने के कई तरीके हैं, लेकिन यह या तो दो कथन में किया गया है या एक क्वेरी के साथ जो आपके पास है उससे अवधारणात्मक रूप से अलग है। (नीचे सॉल्यूशंस)
अपने मूल प्रश्न में एक पहलू यह है कि कई मायनों में व्याख्या की जा सकती है:
के साथ ही कितने कुल पंक्तियों को देखते
यानी हो सकता है या तो कर रहे हैं:
- परिणाम में लौटाई गई प्रत्येक पंक्ति की गणना करें।
- प्रत्येक पंक्ति है कि अगर यह सीमा खंड (जो इस मामले में 5 पंक्तियों को परिणाम ट्रंकेटस)
(मैं दोनों नीचे के लिए उत्तर प्रदान करेंगे) के लिए नहीं थे लौटा दिए गए हैं गणना
लेकिन यह केवल एक पंक्ति देता है। मैं अनुमान लगा रहा हूं क्योंकि COUNT (*) प्रत्येक पंक्ति के लिए समान होगा, और किसी कारण से, MySQL केवल इसके लिए अद्वितीय मानों वाली पंक्तियों को वापस कर रहा है? मेरे पास कोई सुराग नहीं है।
COUNT
एक समग्र कार्य है। एक समग्र फ़ंक्शन का उपयोग करके, आप डेटाबेस को पंक्तियों के समूह को घुमाने और एक पंक्ति में इसके कुछ पहलुओं को प्रोजेक्ट करने के लिए कह रहे हैं। भ्रमित करने वाला यह है कि MySQL भी आपको SELECT
सूची में गैर-कुल और कुल अभिव्यक्तियों को मिश्रण करने के लिए है। अधिकांश अन्य डेटाबेस इस की अनुमति नहीं देते हैं और इसके लिए आपको एक त्रुटि देते हैं, लेकिन हां MySQL नहीं करता है।
लेकिन COUNT (*) अभी भी सभी पंक्तियों को एक पंक्ति में जोड़ता है, जो पंक्तियों के पूरे समूह का प्रतिनिधित्व करता है।
इसके अलावा, यदि प्रत्येक पंक्ति में अतिरिक्त कॉलम जोड़ने के लिए कुल मिलाकर बेहतर तरीका है, तो मुझे इसके बजाय यह पसंद आएगा। धन्यवाद!
हाँ, कई तरीके हैं।
आप पंक्तियों की संख्या प्राप्त करना चाहते हैं पीएचपी में लौट आए, इसलिए, MySQL अपनी सीमा खंड लागू किया के बाद, मैं बस php समारोह mysql_num_rows
(http://www.php.net/manual/en/function.mysql-num-rows.php) mysql_query
कॉल करने के बाद फोन करने का सुझाव देते हैं।
यदि आप LIMIT
खंड की अनुपस्थिति में लौटाई गई पंक्तियों की संख्या प्राप्त करना चाहते हैं, तो मैं इसे 2 चरणों में करने का सुझाव देता हूं: सबसे पहले, अपनी मूल क्वेरी के एक छोटे से संशोधित संस्करण को निष्पादित करें, और फिर तत्काल बाद कि, MySQL के FOUND_ROWS
फ़ंक्शन को कॉल करें। (http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows देखें)
यह इस तरह दिखेगा:
$result = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM posts LIMIT 0, 5');
//do stuff with the result, but don't do any other queries
//get the total number of rows (disregarding the LIMIT clause)
$result = mysql_query('SELECT FOUND_ROWS()');
SQL_CALC_FOUND_ROWS
संशोधक MySQL बताता LIMIT
खंड लागू करने से पहले पंक्तियों की कुल संख्या का ट्रैक रखने के लिए, और FOUND_ROWS()
रिटर्न उस नंबर। मन में 2 बातें रखें:
- इन दोनों
mysql_query
कॉल एक ही कनेक्शन
mysql_query
ओह, अंतिम नोट करने के लिए इन कॉल inbetween किसी अन्य क्वेरी को निष्पादित न करें अधिक निष्पादित किया जाना चाहिए: का उपयोग करते समय LIMIT
, आप आम तौर पर परिणामों को किसी विशेष तरीके से आदेश देना चाहते हैं। आमतौर पर लोग अंकन के लिए LIMIT
का उपयोग करते हैं। यदि आप पंक्तियों का ऑर्डर नहीं करते हैं, तो ऑर्डर अनिश्चित है और बाद के प्रश्न पिछले बयान द्वारा पहले से लौटाई गई पंक्तियों को वापस कर सकते हैं, भले ही LIMIT
ऑफ़सेट अलग हो। आप ORDER BY
खंड का उपयोग कर परिणाम को स्पष्ट रूप से ऑर्डर कर सकते हैं। (http://dev.mysql.com/doc/refman/5.5/en/select.html)
यदि आप PHP का उपयोग कर रहे हैं, तो क्यों नहीं 'mysql_num_rows' – hjpotter92
@ hjpotter92 का उपयोग करें, लेकिन यह इस पर निर्भर करता है कि "कुल" ओपी सोच रहा है। वर्तमान में चयनित कुल ('mysql_num_rows' से ठीक है) या पूरी तालिका में पंक्तियों की संख्या। –
अच्छा बिंदु, @ मिचल। मैंने अपने जवाब में दोनों मामलों को संबोधित किया। –