2013-01-10 20 views
7

मैं एक मेज इन क्षेत्रों के साथ foo कहा जाता है। कुछ ऐसा:COUNT (*) के अवरोही क्रम में सूचीबद्ध पंक्तियों को कैसे वापस करें?</p> <pre><code>- id - type - parentId </code></pre> <p>मैं माता पिता आईडीएस की एक सूची का चयन करने, कितनी बार सारणी में दिखाया गया के अपने <code>COUNT(*)</code> के अवरोही क्रम में हैं:

SELECT DISTINCT parentId FROM `foo` 
ORDER BY (COUNT(parentId) DESC where parentId = parentId) 

यह सबसे कुशल तरीके से कैसे किया जा सकता है और सर्वर पर कम से कम लोड डाल सकता है?

वहाँ, तालिका में रिकॉर्ड के हजारों के हजारों-सैकड़ों, तो मैन्युअल रूप से प्रत्येक रिकॉर्ड के माध्यम से जा स्वीकार्य नहीं है ..

उत्तर

13

बस एक GROUP BY खंड को लागू करने, और यह सोचते हैं आप एक सूचकांक है, FOREIGN KEY द्वारा किया जा सकता है या parentId पर, प्रदर्शन काफी अच्छा होना चाहिए। (parentId ऐसा लगता है कि यह FORIEGN KEY है, इसलिए इंडेक्सिंग को लागू करने के लिए बाधा को परिभाषित करना सुनिश्चित करें)।

SELECT `parentId` 
FROM `foo` 
GROUP BY `parentId` 
ORDER BY COUNT(*) DESC 
1

यह कैसे सबसे कारगर तरीका में किया जा सकता है और सर्वर पर कम से कम बोझ डालने?

कुंजी लिए सबसे कारगर तरीका है।

निश्चित रूप से एक गणना() नहीं है, लेकिन सबसे कुशल है ... एक फ़ील्ड पढ़ने के लिए, जिसे आप गणना परिणाम संग्रहीत कर रहे हैं। आप इसे ट्रिगर या डालने के बाद अपडेट कर सकते हैं।

खासकर जब

तालिका में रिकॉर्ड के हजारों के हजारों-सैकड़ों हो सकता है