2011-10-24 6 views
0

私は2つのテーブルを持っています。私はインデックスページ上の各関連カテゴリに1つの最新ニュースを表示したい。したがって、「どのようにmysqlのjoin句を使って各カテゴリの最後のニュースを1つ選択できますか? :MySQLでjoin句を使用して各カテゴリの最新ニュースを1つ選択する方法は?

category_table:

id|category_name| 
--+-------------+ 
1 | Sport  | 
2 | Policy  | 
3 | Hot News | 

all_news_table:

id | category_id | title 
---+-------------+--------------- 
1 |3   | addsad 
2 |2   | asdad 
3 |1   | sdadasdasd 
3 |2   | sdadasdasd 
4 |1   | dsasdas 
5 |3   | asdasdasd 
6 |3   | sdasdas 
+0

ここで最後のニュースはどういう意味ですか? – Varun

+0

最後のニュースは:関連カテゴリに応じた最新のニュースID – Someone

答えて

2

が高いのidのは、 '新しい' ニュース項目を表すことを前提としています。

まず、副選択でニュースカテゴリごとに最も高いIDを選択し、それらのニュース項目のすべてのデータを選択します。

SELECT c.category_name, a.title, a.body 
FROM all_news_table a 
INNER JOIN category_table c ON (a.category_id = c.id) 
WHERE a.id IN (
    SELECT max(a1.id) FROM all_news_table a1 
    GROUP BY a1.category_id) 
+0

+1本当に素敵で素早い応答 – Varun

+0

ヨハンに大きな感謝。ヨハンは本当に素晴らしい。 – Someone

+0

@Johan、他の解決方法はありますか?時間がかかるので(**クエリは25.9456秒**を要しました) – Someone

0

別の可能性:ヨハンの答えについては

SELECT c.category_name, a.title, a.body 
    FROM all_news_table a 
INNER JOIN category_table c ON c.id = a.category_id 
    LEFT JOIN all_news_table a2 ON a2.category_id = a.category_id 
          AND a2.id > a.id 
WHERE a2.id IS NULL 

、これはcategory_ididのインデックスを必要とし、あなたがテーブルall_news_tableid列にNOT NULL制約を前提とすることがあります。

関連する問題