2017-03-09 74 views
0

我試圖擺脫this previous answer的結果,但似乎沒有任何效果。我有一個幾乎相同的設置,只是一個不同類型的文件。MySQL - 帶連接的GROUP_CONCAT產生1054錯誤

文件表files

id file_name 
1 1e462cef-1c2c-4ddf-8b48-0b3002e2101d.nzb 
2 303dc268-bf55-49e5-9901-cfbb99b09a69.nzb 
3 1297993d-784b-4996-b3b9-9048b068652b.nzb 
4 a2cebf3a-b3b1-498e-ad4c-100774ff4b9d.nzb 

標籤表tags

id tag_name 
1 no.mirrors 
2 at.least.one.mirror 
3 multiple.mirrors 
4 no.mirrors 
5 original.deleted 

文件標籤關係表files__tags

file_id (FK to files.id) tag_id (FK to tags.id) 
     1     1 
     1     5 
     2     1 
     3     3 
     3     5 
     4     4 

,所以我希望得到一些輸出,如:

file_id file_name         tags 
     1 1e462cef-1c2c-4ddf-8b48-0b3002e2101d.nzb 1,5 
     2 303dc268-bf55-49e5-9901-cfbb99b09a69.nzb 1 
     3 1297993d-784b-4996-b3b9-9048b068652b.nzb 3,5 
     4 a2cebf3a-b3b1-498e-ad4c-100774ff4b9d.nzb 4 

我試圖重新對前一個問題是這樣的回答我的查詢:

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags 
FROM files 
LEFT OUTER JOIN tags ON files__tags.file_id = files.id 
GROUP BY files.file_name; 

我嘗試了一些其他的事情,在對這個問題的回答引用了一個tag.photo,這個問題在問題提供者提供的簡化表格結構中不存在,我認爲這是表格中關於照片和標籤的拼寫錯誤。

反正我得到的錯誤是:

SQL query: 

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags 
FROM files 
LEFT OUTER JOIN tags ON files__tags.file_id = files.id 
GROUP BY files.file_name LIMIT 0, 25 

MySQL said: 
#1054 - Unknown column 'files__tags.tag_id' in 'field list' 

以上所有列的存在。

非常感謝任何想法!

編輯:我已經試過了兩點建議(添加關係數據庫到FROM和逃避表/列名)

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags 
FROM files,files__tags 
LEFT OUTER JOIN tags ON `files__tags`.`file_id` = `files`.`id` 
GROUP BY files.file_name; 

我也嘗試過每一種事情上自己,逃生整個語句中的所有表/列名稱。

有了逃避我得到:

#1054 - Unknown column 'files__tags.tag_id' in 'field list' 

隨着FROM評爲files__tags表我得到:

#1054 - Unknown column 'files.id' in 'on clause' 

EDIT2:好的,謝謝多的解決方案

SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags 
FROM files 
LEFT JOIN files__tags ON files__tags.file_id =files.id 
LEFT OUTER JOIN tags ON tags.id=files__tags.tag_id 
GROUP BY files.file_name LIMIT 0, 25 
+0

我可以知道這是什麼'files__tags'? –

+0

這是與文件和標籤相關的表格(上面標有它們) – incorpusyehtee

+0

所以你必須在'JOIN'或'FROM'子句中提到該表格。 –

回答

0
SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags 
FROM files 
LEFT JOIN files__tags ON files__tags.file_id =files.id 
LEFT OUTER JOIN tags ON tags.id=files__tags.tag_id 
GROUP BY files.file_name LIMIT 0, 25 

試試上面的代碼,希望這會有所幫助

0

我不知道爲什麼要用LEFT OUTER JOIN。試試這個

 SELECT files.file_name, GROUP_CONCAT(files__tags.tag_id) AS associated_tags 
FROM files 
LEFT JOIN files__tags ON files__tags.file_id =files.id 
LEFT JOIN tags ON tags.id=files__tags.tag_id 
GROUP BY files__tags.file_id LIMIT 0, 25