2013-09-30 9 views
6

Próbuję pobrać datę z dwóch tabel przy użyciu zapytania MYSQL. Chcę dołączyć do nich razem: categories.cat_id=topics.topic_cat. Wiele wpisów może mieć ten sam numer topic_cat, więc chcę wybrać tylko najnowszą, która jest równa MAX(topic_date).MYSQL JOIN dwie tabele ograniczają wyniki z drugiej tabeli według daty

Poniższe zapytanie pokazuje poprawne informacje z tematów, z tylko jednym wynikiem na topic_cat i tym, który ma najnowszą datę.

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

Wielokrotne wiersze mogą mieć taką samą wartość dla topic_cat, ale chcę tylko odzyskać i dołącz tylko najnowsze, max (topic_date), a następnie przystąpić do zapytania, które pojawiają się następujące informacje z tabeli Kategorie.

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; 

To zapytanie wyświetla poprawne informacje, z wyjątkiem jednej rzeczy. Pokazuje topic_cat z najstarszym wpisem lub MIN(topic_date). Próbowałem, aby uzyskać topic_cat przez najnowszy wpis lub MAX(topic_date), ale bez powodzenia.

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 

Każda pomoc lub sugestie będą bardzo mile widziane.

OK, więc tutaj są przykładowe dane i powiązany pożądany wynik.

Tabela 1 = kategorie

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

Tabela 2 = wątków

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

ja jak zapytania powrotu następujące dane na podstawie powyższych tabelach:

_________________________________________________________________________________________________ 
| 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 mam nadzieję, że to wyjaśnia.

+1

Proszę podać przykładowe dane i związane z nimi pożądanego rezultatu. –

+0

Spróbuj użyć klauzuli "LIMIT". –

+0

Czy mogę ograniczyć limit według najnowszej daty? – Jimbob

Odpowiedz

4

Spróbuj to:

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

Spróbuj zmienić

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

do:

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