चूंकि MySQL विंडो फ़ंक्शंस का समर्थन नहीं करता है, मुझे नहीं लगता कि सबक्वेरी के बिना ऐसा करने का कोई तरीका है:
SELECT f.id AS forum_id,
f.name AS forum_name,
t.id AS thread_id,
t.topic AS thread_topic,
t.ts AS thread_timestamp,
p.id AS post_id,
p.content AS post_content,
p.ts AS post_timestamp
FROM forums f
JOIN (SELECT t2.forum_id, max(p2.ts) as ts
FROM posts p2
JOIN threads t2 ON p2.thread_id = t2.id
GROUP BY t2.forum_id) max_p ON f.id = max_p.forum_id
JOIN posts p ON max_p.ts = p.ts
JOIN threads t ON f.id = t.forum_id AND p.thread_id = t.id
ORDER BY p.ts
स्वाभाविक रूप से, नवीनतम परिणामों को कैशिंग करने से आप MAX() को कॉल करने के प्रदर्शन दंड के बिना ऐसा कर सकते हैं, लेकिन सही सूचकांकों के साथ, यह अधिक समस्या नहीं होनी चाहिए...
अपडेट करें
पोस्ट के बिना थ्रेड्स और थ्रेड्स के बिना फ़ोरम को शामिल करने का सबसे संक्षिप्त तरीका इनर जॉइन के बजाय लेफ्ट जॉइन का उपयोग करना होगा:
SELECT f.id AS forum_id,
f.name AS forum_name,
t.id AS thread_id,
t.topic AS thread_topic,
t.ts AS thread_timestamp,
p.id AS post_id,
p.content AS post_content,
p.ts AS post_timestamp
FROM forums f
LEFT JOIN (SELECT t2.forum_id, max(COALESCE(p2.ts, t2.ts)) as ts, COUNT(p2.ts) as post_count
FROM threads t2
LEFT JOIN posts p2 ON p2.thread_id = t2.id
GROUP BY t2.forum_id) max_p ON f.id = max_p.forum_id
LEFT JOIN posts p ON max_p.ts = p.ts
LEFT JOIN threads t ON f.id = t.forum_id AND (max_p.post_count = 0 OR p.thread_id = t.id)
ORDER BY p.ts