2010-01-22 12 views
6

यहाँ के साथ आदेश मेरी मेजऑर्डर करने के लिए कैसे, समूह, mySQL

tbl_records 
-title 
-created 
-views 

मैं कैसे मैं एक प्रश्न है, जहां वे शीर्षक द्वारा वर्गीकृत किया है बना सकते हैं सोच रहा हूँ का एक सरलीकृत संस्करण है, लेकिन रिकॉर्ड है कि के लिए दिया जाता है प्रत्येक समूह हाल ही में बनाया गया है। मैं फिर इसे विचारों से आदेश दूंगा।

एक तरीका मुझे लगता है कि एक उप क्वेरी करना है और इसे बनाया गया है और फिर इसे शीर्षक से समूहित करें और फिर उन परिणामों से इसे दृश्यों के अनुसार आदेश दें। मुझे लगता है कि हालांकि एक बेहतर तरीका है।

धन्यवाद

संपादित करें:

नमूना डेटा:

-title: Gnu Design 
-created: 2009-11-11 14:47:18 
-views: 104 

-title: Gnu Design 
-created:2010-01-01 21:37:09 
-views:9 

-title: French Connection 
-created:2010-05-01 09:27:19 
-views:20 

मैं चाहूँगा परिणाम होने के लिए:

-title: French Connection 
-created:2010-05-01 09:27:19 
-views:20 

-title: Gnu Design 
-created:2010-01-01 21:37:09 
-views:9 

केवल सबसे recen टी जीएनयू डिजाइन दिखाया गया है और फिर परिणाम विचारों द्वारा आदेश दिया जाता है।

+1

यदि आपके पास नमूना डेटा है, तो यह बहुत स्पष्ट होगा। – Yada

+0

हां, कृपया प्रश्न स्पष्ट करें। –

उत्तर

3

यह greatest-n-per-group समस्या StackOverflow पर अक्सर लगता है कि का एक उदाहरण है।

यहाँ मेरी हमेशा की तरह समाधान है:

SELECT t1.* 
FROM tbl_records t1 
LEFT OUTER JOIN tbl_records t2 ON (t1.title = t2.title AND 
    (t1.created < t2.created OR t1.created = t2.created AND t1.primarykey < t2.primarykey)) 
WHERE t2.title IS NULL; 

स्पष्टीकरण: पंक्ति t1 जिसके लिए कोई अन्य पंक्ति t2 ही title और एक अधिक से अधिक created तारीख के साथ मौजूद हैं। संबंधों के मामले में, टाई को हल करने के लिए कुछ अनूठी कुंजी का उपयोग करें, जब तक कि title प्रति एकाधिक पंक्तियां प्राप्त न करें।

1
select i.*, o.views from 
    (
     select 
     title 
     , max(created) as last_created 
     from tbl_records 
     group by title 
    ) i inner join tbl_records o 
    on i.title = o.title and i.last_created = o.created 
    order by o.views desc 

मैं यह सोचते हैं रहा है कि एकत्रीकरण viewscount() है पर लागू किया जा सकता है, लेकिन हो सकता है अच्छी तरह से गलत हो (आप को परिभाषित करने की किसी तरह से विचारों का जो उपाय आप नवीनतम बनाया के लिए करना चाहते हैं की आवश्यकता होगी शीर्षक)। उम्मीद है की वो मदद करदे।

EDIT: अपना नमूना डेटा देखा और तदनुसार संपादित किया है।

0
SELECT title, 
     MAX(created), 
     views 
FROM table 
GROUP BY title 
ORDER BY views DESC 
संबंधित मुद्दे