2010-08-25 71 views
0

嗨,我需要幫助的查詢。
Mysql加入問題

我有4個表

文章 - ID,CATEGORY_ID邀請,USER_ID
類別 - ID
article_category - article_id的,CATEGORY_ID
用戶 - ID

在文章表中的CATEGORY_ID用於確定主要類別

現在我想獲得所有文章,所以我使用下面的查詢。

文章可以有多個類別。我希望看到的文章列表附

主要類別信息來選擇。*,c.title,c.slug 從文章的一個,article_category AC,C類,用戶ü
WHERE ac.article_id = a.category_id應該是ac.article_id = a.id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id = '1'

問題與此查詢的是,我得到不正確的類別信息,我不認爲我應該運行一個子查詢類似下面來解決它

(選擇類別其中id = a.category_id標題)作爲標題

謝謝

+0

WHERE ac.article_id = a.category_id,應該在哪裏ac.category_id = a.category_id – 2010-08-25 13:55:29

+0

你能更具體?你是否獲得了所有文章的「主要」類別信息?你的文章可以有多個類別?你想看每篇文章一次或重複每個類別附加到它? – Cfreak 2010-08-25 13:57:02

+0

@cfreak文章可以有多個類別。我希望看到所有文章都附有主要類別信息 – Lylo 2010-08-25 14:04:32

回答

0

您的連接子句不正確。我已經重新寫它的ANSI語法,使其更具可讀性,以及JOIN條款更加明確:

SELECT a.*, c.title , c.slug 
FROM articles a 
INNER JOIN article_category ac on ac.category_id = a.category_id 
INNER JOIN categories c on ac.category_id = c.id 
INNER JOIN users u on a.user_id = u.id 
WHERE ac.category_id = '1' 

順便說一句,要加入對users表,但不能從它選擇的任何列,這樣可以去除除非您使用它來過濾結果。

0
從查詢

刪除用戶表(不使用的話),改變從ac.article_id = a.category_id條件ac.category_id = a.category_id

 SELECT a.*, c.title , c.slug 
     FROM articles a, article_category ac, categories c 
     WHERE ac.category_id = a.category_id 
     AND ac.category_id = c.id 
     AND ac.category_id = '1' 
0
select a.*, c.title, c.slug 
from articles a 
join article_category ac on a.id = ac.article_id 
join categories c on ac.category_id = c.id 
join users u on a.user_id = u.id 
where c.id = 1 
0

要加入上article_id的= CATEGORY_ID,那沒有意義,嘗試改爲:

SELECT a.*, c.title , c.slug FROM articles a, article_category ac, categories c, users u 
WHERE ac.category_id = a.category_id 
AND ac.category_id = c.id 
AND a.user_id = u.id 
AND ac.category_id = '1'