2013-09-30 34 views
6

Tôi đang cố truy xuất ngày từ hai bảng bằng truy vấn MYSQL. Tôi muốn tham gia cùng họ là categories.cat_id=topics.topic_cat. Nhiều mục nhập có thể có cùng một topic_cat, vì vậy, tôi chỉ muốn CHỌN lần gần đây nhất, tương đương với MAX(topic_date).MYSQL JOIN hai bảng giới hạn kết quả từ bảng thứ hai theo ngày

Truy vấn sau đây hiển thị thông tin chính xác từ các chủ đề, chỉ với một kết quả cho mỗi topic_cat và kết quả đó có ngày gần đây nhất.

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

Nhiều hàng có thể có cùng giá trị cho topic_cat, nhưng tôi chỉ muốn lấy lại và tham gia chỉ gần đây nhất, MAX (topic_date) và sau đó tham gia vào một truy vấn trong đó cho thấy các thông tin sau từ bảng loại.

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; 

Truy vấn này hiển thị thông tin chính xác, ngoại trừ một điều. Nó cho thấy topic_cat với mục cũ nhất, hoặc MIN(topic_date). Tôi đã thử những điều sau đây để có được topic_cat bằng cách nhập mới nhất hoặc MAX(topic_date), nhưng không thành công.

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 

Bất kỳ trợ giúp hoặc đề xuất nào sẽ được đánh giá cao.

Ok, vì vậy, đây là dữ liệu mẫu và kết quả mong muốn được liên kết.

Bảng 1 = loại

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

Bảng 2 = chủ đề

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

Tôi muốn truy vấn để trả lại dữ liệu sau đây dựa trên các bảng trên:

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

tôi hy vọng làm rõ mọi thứ.

+1

Vui lòng cung cấp dữ liệu mẫu và kết quả mong muốn liên quan. –

+0

Cố gắng sử dụng mệnh đề 'LIMIT'. –

+0

Tôi có thể giới hạn vào ngày gần đây nhất không? – Jimbob

Trả lời

4

Hãy thử này:

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

Hãy thử thay đổi

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

tới:

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 
Các vấn đề liên quan