2011-10-12 94 views
0

我有如下表MySQL查詢幫助來獲取數據合併兩個表

articles_category

id title sef_title 

articles_data

id cat_id title sef_title details 

在每個表 「ID」 是主鍵articles_data.cat_id是articles_category的外鍵

我需要爲每個文章類別提取以下數據的最新文章數據。

articles_category.id 
articles_category.title 
articles_category.sef_title 
articles_data.id 
articles_data.cat_id 
articles_data.title 
articles_data.sef_title 
articles_data.details 

我試着用下面的查詢,但它顯示的第一篇文章(最老的條目),而不是最新的一個。

SELECT 
    articles_category.id as article_cat_id, articles_category.sef_title as cat_sef_title, articles_category.title as cat_title, 
    articles_data.id, articles_data.cat_id as listing_cat_id, articles_data.title, articles_data.sef_title, articles_data.details 
FROM articles_category, articles_data 
WHERE articles_category.id = articles_data.cat_id 
GROUP BY articles_data.cat_id 
ORDER BY articles_data.id DESC 
+1

Mhhh ...日期在哪裏? – Ivan

+0

@lvan該表沒有任何日期字段,我需要排序的是每個類別的最後一篇文章 – Prakash

+0

您應該使用日期,從不信任ID。你不知道在現場後面做了什麼SQL引擎:) – Ivan

回答

1

如果它是一個一對多的關係,嘗試(未經測試):

SELECT * 
FROM articles_category, articles_data 
WHERE articles_category.id = articles_data.cat_id 
    AND articles_data.id in (
    SELECT max(articles_data.id) 
    FROM articles_data GROUP BY cat_id 
) 

你是不是在GROUP BY

保證特定的行,你真的應該使用日期上你的文章作爲即使您正在使用自動增量,最大ID也不能保證是最新的文章

+0

這個查詢似乎工作正常。我不確定你想告訴的是「即使你使用自動增量,最大ID也不能保證是最新的文章」。你能提供更多的信息嗎? – Prakash

+0

人們總是可以在某個時刻刪除某個文章(這不會是最新的) – smp7d

0

ORDER影響GROUP函數執行後的記錄顯示。 GROUP功能識別它在搜索中看到的第一條記錄。

你需要做的是執行2個查詢。第一個應該是

SELECT max(articles_data.id), articles_data.cat_id ... 
GROUP BY articles_data.cat_id 

第二查詢應取使用這些所得主鍵相關聯的記錄。

+0

一個子查詢將工作 – smp7d

+0

@ smp7d一個子查詢肯定會工作。 –

+0

理論上...是的。但是,對於相關應用程序而言,速度可能太慢。 – smp7d

-1

可能性是創建另一個值,如date_created,並在創建條目時在其中放置時間戳。

然後你只需要ORDER BY日期。

+1

升序排序顯示列表頂部的最小數字。你的答案不會改變他的輸出。 –

+0

id在兩個表上都是auto_increment。我嘗試了'ORDER BY articles_data.id ASC'和'ORDER BY articles_data.id DESC',但它不起作用 – Prakash

+0

解決方案只是創建一個時間戳。知道什麼時候創建是一件好事。 –