2011-12-24 157 views
0

我有一張名爲Articles的表格。我也有一張表Tags。標籤表實際上具有2個獨立的表格,因爲它是文章和標籤之間的多對多關係。例如:MySQL加入。從一個表到另一個表加入多行?

CREATE TABLE Articles (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT 
    title VARCHAR(255), 
    author INT UNSIGNED NOT NULL, 
    body TEXT NOT NULL -- column type may not be representative 
) Engine=InnoDB; 

CREATE TABLE Tags (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(32) 
) Engine=InnoDB; 

CREATE TABLE Article_Tags (
    article INT UNSIGNED NOT NULL, 
    tag INT UNSIGNED NOT NULL, 
    FOREIGN KEY (article) REFERENCES Articles (id), 
    FOREIGN KEY (tag) REFERENCES Tags (id) 
) Engine=InnoDB; 

現在,是有可能做一個查詢返回的文章,也都涉及到在同一個查詢文章從標籤表中的標籤?

+0

不,它不是作業。我實際上在CodeIgniter論壇上發佈了一個問題(我可以鏈接,如果你需要我的話)與某個項目相關,並且有人建議做一個查詢。我在問,因爲我不確定是否有可能。 – GV1 2011-12-24 23:35:10

+0

您通常會在table2.table1ID = table1.id內連接table3 ON table3.id = table2.table3id'中執行select * from table1內連接table2。其中'table2'是您的鏈接表。 – 2011-12-24 23:36:35

+0

我明白了。我需要回顧一下我的連接有沒有使用它們一段時間。 – GV1 2011-12-24 23:37:02

回答

0

按照意見,您通常使用JOIN語句來組合多個表中的相關記錄。

注意,我認爲

  • ArticlesID
  • Article_TagsArticleIDTagID
  • TagsID

如果實際列名稱不同,您應該將我的聲明中的相應列替換爲其實際名稱。關於JOIN語法

SQL連接被用於從兩個或更多表中查詢數據

SQL語句

SELECT * 
FROM Articles a 
     INNER JOIN Article_Tags at ON at.ArticleID = a.ID 
     INNER JOIN Tags t ON t.ID = at.TagID 

的更多信息,根據一定的列之間的 關係在這些表中

1

如果您想要取回單個行,則需要使用an aggregate function來組合標記。

假設article(id, title, content)tag(id, name)article_tags(連接表)有(tag_id, article_id),那麼這樣的事情應該這樣做(顯然,未測試):

SELECT a.title, 
     a.content, 
     GROUP_CONCAT(
     DISTINCT t.name 
     ORDER BY ASC 
     SEPARATOR ", " 
    ) as tags 
FROM article a 
INNER JOIN article_tags at ON at.article_id = a.id 
INNER JOIN tag t ON t.id = at.tag_id 
GROUP BY a.id