システムにアップロードされたファイルの「ファイルタグ」を表示するページがあります。すべてのファイルには、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))