2013-09-30 10 views
6

में शामिल करें, मैं एक MYSQL क्वेरी का उपयोग करके दो तालिकाओं से दिनांक पुनर्प्राप्त करने का प्रयास कर रहा हूं। मैं उनसे जुड़ना चाहता हूं categories.cat_id=topics.topic_cat। एकाधिक प्रविष्टियों में एक ही topic_cat हो सकता है, इसलिए मैं केवल सबसे हालिया चुनना चाहता हूं, जो MAX(topic_date) के बराबर है।MYSQL दो टेबल सीमाओं को दूसरी तालिका से दिनांक

निम्नलिखित क्वेरी विषयों से सही जानकारी दिखाती है, केवल एक परिणाम प्रति विषय_cat के साथ और जिसके परिणामस्वरूप सबसे हालिया तारीख होती है।

SELECT topic_subject, topic_cat, topic_date 
FROM topics 
GROUP BY topic_cat DESC 

एकाधिक पंक्तियों topic_cat के लिए एक ही मूल्य है सकते हैं, लेकिन मैं सिर्फ पुनः प्राप्त करने और शामिल होने के केवल सबसे हाल ही में, मैक्स (topic_date) और फिर एक प्रश्न जो श्रेणियों तालिका से निम्नलिखित जानकारी से पता चलता करने के लिए शामिल हो चाहता हूँ।

SELECT categories.cat_id, categories.cat_name, categories.cat_description, topics.topic_subject, topics.topic_cat, topics.topic_date, topics.topic_by 
FROM categories 
LEFT JOIN topics 
ON categories.cat_id=topics.topic_cat 
GROUP BY cat_id; 

यह क्वेरी एक चीज़ को छोड़कर सही जानकारी प्रदर्शित करती है। यह सबसे पुरानी प्रविष्टि, या MIN(topic_date) के साथ topic_cat दिखाता है। मैंने नवीनतम प्रविष्टि या MAX(topic_date) द्वारा topic_cat प्राप्त करने के लिए निम्नलिखित प्रयास किए हैं, लेकिन सफलता के बिना।

SELECT categories.cat_id, categories.cat_name, categories.cat_description 
FROM categories 
LEFT JOIN (SELECT topic_subject, topic_cat, topic_date, topic_by 
FROM topics 
GROUP BY topic_cat DESC) AS topics 
ON categories.cat_id=topics.topic_cat 

कोई भी मदद या सुझावों की बहुत सराहना की जाएगी।

ठीक है, तो यहां नमूना डेटा और वांछित परिणाम संबंधित है।

तालिका 1 = श्रेणियों

_______________________________________________________ 
| cat_id | cat_name  | cat_description    | 
------------------------------------------------------- 
| 1  | james  | Some information about james| 
------------------------------------------------------- 
| 2  | myo   | Some information about myo | 
------------------------------------------------------- 
| 3  | brandon  | Some information about brandon | 
------------------------------------------------------- 

तालिका 2 = विषयों

__________________________________________________ 
| topic_subject | topic_cat | topic_date | topic_by | 
---------------------------------------------------------- 
| marcos  | 2   | 2013-9-28 | User 1  | 
--------------------------------------------------------- 
| ferdinand  | 2   | 2013-9-29 | User 2  | 
--------------------------------------------------------- 
| maria luisa | 2   | 2013-9-30 | User 1  | 
--------------------------------------------------------- 
| Isabella  | 1   | 2013-8-24 | User 3  | 
-------------------------------------------------------- 
| Carlos  | 3   | 2012-6-21 | User 2  | 
-------------------------------------------------------- 
| Enrique  | 3   | 2011-4-2 | User 3  | 
--------------------------------------------------------- 

मैं क्वेरी चाहते हैं ऊपर तालिकाओं के आधार पर निम्न डेटा वापस करने के लिए:

_________________________________________________________________________________________________ 
| cat_id | cat_name  | cat_description    | topic_subject | topic_cat | topic_date | topic_by  | 
---------------------------------------------------------------------------------------------------------------- 
| 1  | james  | Some information about james | Isabella  | 1   | 2013-8-24 | User 3   | 
---------------------------------------------------------------------------------------------------------------- 
| 2  | myo   | Some information about myo  | maria luisa | 2   | 2013-9-30 | User 1   | 
---------------------------------------------------------------------------------------------------------------- 
| 3  | brandon  | Some information about brandon | Carlos   | 3   | 2012-6-21 | User 2   | 
---------------------------------------------------------------------------------------------------------------- 

मैं उम्मीद है कि चीजों को स्पष्ट करता है।

+1

नमूना डेटा और संबद्ध वांछित परिणाम प्रदान करें। –

+0

'LIMIT' खंड का उपयोग करने का प्रयास करें। –

+0

क्या मैं हाल ही की तारीख से सीमित कर सकता हूं? – Jimbob

उत्तर

4

इस प्रयास करें:

### 
SELECT * FROM categories c 
LEFT JOIN topics t ON c.cat_id = t.topic_cat 
WHERE c.cat_id IN (SELECT t1.cat_id FROM (
    SELECT c.cat_id, c.cat_name, MAX(t.topic_date) AS maxdate FROM categories c 
    LEFT JOIN topics t ON c.cat_id = t.topic_cat 
    GROUP BY c.cat_name 
) as t1 WHERE t1.maxdate = t.topic_date OR t.topic_date IS NULL); 

### without nulls 
SELECT * FROM categories c 
    LEFT JOIN topics t ON c.cat_id = t.topic_cat 
    WHERE c.cat_id IN (SELECT t1.cat_id FROM (
    SELECT c.cat_id, c.cat_name, MAX(t.topic_date) AS maxdate FROM categories c 
    LEFT JOIN topics t ON c.cat_id = t.topic_cat 
    GROUP BY c.cat_name 
) as t1 WHERE t1.maxdate = t.topic_date); 
1

के लिए बदल रहा

LEFT JOIN (SELECT topic_subject, topic_cat, topic_date, topic_by 
FROM topics 
GROUP BY topic_cat DESC) AS topics 

का प्रयास करें:

LEFT JOIN (SELECT topic_subject, topic_cat, topic_date, topic_by 
FROM topics 
GROUP BY topic_cat 
ORDER BY topic_date DESC 
LIMIT 0,1) AS topics 
संबंधित मुद्दे