我有一個頁面顯示上傳到我的系統上的文件的「文件標籤」。每個文件可以有0個,1個或多個與之關聯的文件標籤。如何在條件存在時按信息顯示所有組?
我已經成功地做了一個頁面,會顯示文件名和他們的標籤,如:
File Tag(s)
File#1 None
File#2 TAG1
File#3 TAG1, TAG2
這個SQL查詢將有助於產生上面的數據:
SELECT *, GROUP_CONCAT(`ftg_name` ORDER BY `ftg_name` SEPARATOR ', ')
AS `x_file_tag_names`
FROM `file` LEFT JOIN `link_file_filetag` ON `fileftg_file` = `file_id`
LEFT JOIN `filetag` ON `ftg_id` = `fileftg_filetag`
GROUP BY `fileftg_file` ORDER BY `file_created` DESC;
問題:
我剛在頁面頂部實現了過濾器。允許我在系統中的不同文件標籤之間進行選擇的過濾器。當有人選擇過濾器時,我在WHERE子句中添加一個條件。看看這個查詢:
SELECT *, GROUP_CONCAT(`ftg_name` ORDER BY `ftg_name` SEPARATOR ', ')
AS `x_file_tag_names` FROM `file`
LEFT JOIN `link_file_filetag` ON `fileftg_file` = `file_id`
LEFT JOIN `filetag` ON `ftg_id` = `fileftg_filetag`
WHERE `fileftg_filetag` = '1'
GROUP BY `fileftg_file` ORDER BY `file_created` DESC;
這將產生我的網頁上這樣的結果:
File Tag(s)
File#1 None
File#2 TAG1
File#3 TAG1
這裏的問題是,我仍然希望它列出TAG1, TAG2
爲File#3
。但當然WHERE條件正在擺脫TAG2
。 我想知道是否有隻涉及改變SELECT條件的解決方案。我試圖創建一個看起來像這樣的解決方案:
SELECT *, IF(ISNULL(`filetag_file`), 'None',
(//a subquery that gets all file tags associated with file in outer query))
請不要使用'SELECT *'。另外,你知道,如果你指定的列不是'GROUP'ed,或者是一個集合,列的實際值是未定義的? –