2012-04-16 7 views
8

मेरे पास एक टेबल है जिसमें कई अलग-अलग लेखकों द्वारा ब्लॉग पोस्ट हैं। मैं जो करना चाहता हूं वह 10 सबसे हालिया लेखकों में से प्रत्येक द्वारा हालिया पोस्ट दिखाता है।MySQL - 10 सबसे हालिया लेखकों में से प्रत्येक द्वारा हालिया पोस्ट का चयन

प्रत्येक लेखक की पोस्ट को आसानी से तालिका में जोड़ा जाता है, जिसका अर्थ है कि एक लेखक द्वारा पोस्ट के रन हो सकते हैं। मुझे ऐसा करने के लिए एक ही प्रश्न के साथ आने का समय है।

यह मुझे अंतिम 10 अद्वितीय लेखक आईडी देता है; क्या प्रत्येक लेखक द्वारा हालिया पोस्ट को पकड़ने के लिए इसे उप-चयन के रूप में उपयोग किया जा सकता है?

SELECT DISTINCT userid 
FROM posts 
ORDER BY postid DESC 
LIMIT 10 

उत्तर

3
select userid,postid, win from posts where postid in (
SELECT max(postid) as postid 
FROM posts 
GROUP BY userid 
) 
ORDER BY postid desc 
limit 10 

http://sqlfiddle.com/#!2/09e25/1

+0

यह करीब है - यह प्रत्येक उपयोगकर्ता आईडी के लिए सबसे हालिया पोस्टिड देता है, लेकिन पंक्तियों में शेष डेटा नहीं करता है मैच। उदाहरण के लिए, यह काम नहीं करता है: यूजर आईडी, शीर्षक, बॉडीटेक्स्ट, मैक्स (आईडी) आईडी को पदों से चुनें आईडी आईडीईएस लिमिटेड द्वारा उपयोगकर्ता आईडी ऑर्डर द्वारा ग्रुप 10 –

+0

सही यदि आप सभी फ़ील्ड चाहते हैं, दुर्भाग्य से आपको एक सबक्वायरी चाहिए। मैंने अपना जवाब संपादित किया। –

+0

उत्कृष्ट, धन्यवाद। यह पूरी तरह से काम करता है। –

1

आप हर लेखक और postid DESC द्वारा आदेश के अंतिम postid के लिए एक सबक्वेरी की जरूरत है। फिर, posts मेज पर है कि परिणाम में शामिल होने:

SELECT B.* FROM 
(
    SELECT * FROM 
    (
     SELECT userid,MAX(postid) postid 
     FROM posts GROUP BY userid 
    ) AA 
    ORDER BY postid DESC 
    LIMIT 10 
) A INNER JOIN posts B 
USING (user_id,post_id); 

यकीन है कि आप इस सूचकांक

ALTER TABLE posts ADD INDEX user_post_ndx (userid,postid); 
+0

आप userID पर यौगिक सूचकांक आवश्यकता नहीं होनी चाहिए किया है , postID के रूप में पोस्टआईडी किसी भी तरह अद्वितीय पहचानकर्ता होगा और केवल एक लेखक के पद के लिए मौजूद होगा। – DRapp

+0

@DRapp उस कंपाउंड इंडेक्स को सबक्वायरी एए (पूर्ण इंडेक्स स्कैन बनाम पूर्ण टेबल स्कैन) को गति देने के लिए आवश्यक है – RolandoMySQLDBA

1
SELECT userid 
    , MAX(postid) AS lastpostid 
FROM posts 
GROUP BY userid 
ORDER BY lastpostid DESC 
LIMIT 10 
संबंधित मुद्दे