LoginSignup
3
3

More than 5 years have passed since last update.

MySQLのSET型を使ってブログの記事にタグを付ける

Posted at

タグ付きの記事を作る

ブログのシステムを作っていたら「記事にタグを付けれるようにしてくれ」と言われたんですよ~。

仕方ないので最初は以下のように素直にテーブルを作りました。

article

id subject body
1 題名1 本文1
2 題名2 本文2

tag

id name
1 HTML
2 CSS
3 JavaScript

article_tag

article_id tag_id
1 1
1 3
2 2

これでidが1の記事はHTMLとJavaScriptのタグを持ち、idが2の記事はCSSのタグを持つ、という感じですね。

MySQLのSET型でテーブルをひとつにまとめる

しかし運用してゆくうちに、タグは決め打ちで名称が変わることがない、ということが分かってきたので、面倒になってテーブルをひとつにまとめてしまいました。

article

id subject body tags
1 題名1 本文1 HTML,JavaScript
2 題名2 本文2 CSS

tagsカラムは文字列型ではなく、以下のような定義のSET型です。
SET('HTML', 'CSS', 'JavaScript')
ひとつのカラムに複数の文字列の組み合わせを持つことが出来ます。

挿入は見たまま、文字列をカンマで繋いで行います。
INSERT INTO article(tags) VALUES('HTML,CSS')

検索は、例えばHTMLというタグがある記事を探すには
SELECT * FROM article WHERE tags LIKE '%HTML%'
もしくは、
SELECT * FROM article WHERE FIND_IN_SET('HTML', tags) > 0
です。

おわりに

拡張性や汎用性(MySQL限定なので)は低くなりますが、小規模な場合は使ってみるとスッキリする場合があるかも知れない、と思います。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3