2013-09-30 2 views
6

Ich versuche, Datum aus zwei Tabellen mithilfe einer MySQL-Abfrage abzurufen. Ich möchte sie zusammenkommen waren categories.cat_id=topics.topic_cat. Mehrere Einträge können die gleiche topic_cat haben, also möchte ich nur die neueste, die gleich ist.MYSQL JOIN zwei Tabellen begrenzen Ergebnisse aus zweiter Tabelle nach Datum

Die folgende Abfrage zeigt die korrekten Informationen aus den Themen an, mit nur einem Ergebnis pro topic_cat und dem Ergebnis mit dem neuesten Datum.

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

Mehrere Zeilen können den gleichen Wert für topic_cat haben, aber ich will nur nur die jüngste, MAX (topic_date) abgerufen werden und kommen und dann zu einer Join-Abfrage, die die folgenden Informationen aus den Kategorien Tabelle zeigt.

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; 

Diese Abfrage zeigt die korrekten Informationen an, mit Ausnahme einer Sache. Es zeigt die topic_cat mit dem ältesten Eintrag, oder MIN(topic_date). Ich habe folgendes versucht, um das topic_cat durch den neuesten Eintrag oder zu bekommen, aber ohne Erfolg.

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 

Jede Hilfe oder Vorschläge würden sehr geschätzt werden.

Ok, also hier sind die Beispieldaten und die damit verbundenen gewünschten Ergebnisse.

Tabelle 1 = Kategorien

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

Tabelle 2 = Themen

__________________________________________________ 
| 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  | 
--------------------------------------------------------- 

ich die Abfrage möchte folgende Daten zurückzukehren, basierend auf den oben stehenden Tabellen:

_________________________________________________________________________________________________ 
| 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   | 
---------------------------------------------------------------------------------------------------------------- 

I hoffe das klärt die Dinge.

+1

Bitte geben Datenabtastwert und zugehörige gewünschte Ergebnis. –

+0

Versuchen Sie die Klausel 'LIMIT' zu verwenden. –

+0

Kann ich bis zum letzten Datum einschränken? – Jimbob

Antwort

4

Dieses Versuchen:

### 
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

Versuchen Sie,

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

zu:

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 
Verwandte Themen