upload、tag、upload_tagの3つのテーブルがあります。Uploadはファイルのアップロードの詳細を保持し、tagはタグ名を保持し、upload_tagはアップロードIDをタグIDに一致させるルックアップテーブルです。
+--------------------------------------------------------+
| upload |
+--------------------------------------------------------+
|id |name |
+-----------+--------------------------------------------+
|1 |file_1.jpg |
+-----------+--------------------------------------------+
|2 |file_2.doc |
+-----------+--------------------------------------------+
+--------------------------------------------------------+
|tag |
+--------------------------------------------------------+
|id |name |
+-----------+--------------------------------------------+
|1 |a_tag |
+-----------+--------------------------------------------+
|2 |b_tag |
+-----------+--------------------------------------------+
|3 |c_tag |
+-----------+--------------------------------------------+
+--------------------------------------------------------+
|upload_tag |
+-----------+--------------------------------------------+
|upload_id |tag_id |
+-----------+--------------------------------------------+
|1 |1 |
+-----------+--------------------------------------------+
|1 |2 |
+-----------+--------------------------------------------+
|2 |3 |
+-----------+--------------------------------------------+
|2 |2 |
+-----------+--------------------------------------------+
タグの文字列を使用してデータベースからアップロードをプルする必要がありますが、すべて1行になっているため、結果は次のようになります。
+----------------------------------------------------+
|filename |tags |
+--------------+-------------------------------------+
|file_1.jpg |a_tag; b_tag |
+--------------+-------------------------------------+
|file_2.doc |c_tag; b_tag |
+--------------+-------------------------------------+
現時点では、これを行うための最良の方法は、アップロードIDを受け取り、フォーマットされたタグの文字列を返すMySQL関数を作成することだと考えています。私はここで正しいですか、それともこれを達成するためのより良い方法がありますか?