【MySQL】タグ付け機能の実装にオススメなテーブル設計(TOXI法)その2

プログラミング

どうも、コウイチです。

前回の記事で、MySQLでタグ付け機能を実装してみました。

【MySQL】タグ付け機能の実装にオススメなテーブル設計(TOXI法)その1
どうも、コウイチです。 今回は、MySQLでタグ付け機能を実装してみます。 今回タグ機能の実装を初めてやることになり、色々調査していたところ、なんとか法という名前がついた設計が色々あるみたいなので、それを有り難く使わせてもらいま...

今回は、前回作ったTOXI法によるテーブル設計を使用して、記事のデータを、それに紐づけられたタグ名とともに抽出してみたいと思います。

テーブル設計のおさらい

前回、以下の3つのテーブルを作成しました。

entryテーブル

id title detail
1 PHP記事 これはPHPに関する記事です。
2 C#記事 これはC#に関する記事です。
3 PHP&MySQL記事 これはPHPとMySQLに関する記事です。
4 雑記 これは雑記です。

tagテーブル(タグのマスタ)

id name
1 Java
2 PHP
3 MySQL
4 JavaScript
5 C#

tag_mapテーブル(どの記事にどのタグが紐づいているかを繋ぐテーブル)

id entry_id tag_id (説明)
1 1 2 entry_id=1(PHP記事)に対してtag_id=2(PHP)のタグを紐づけ
2 2 5 entry_id=2(C#記事)に対してtag_id=5(C#)のタグを紐づけ
3 3 2 entry_id=3(PHP&MySQL記事)に対してtag_id=2(PHP)のタグを紐づけ
4 3 3 entry_id=3(PHP&MySQL記事)に対してtag_id=3(MySQL)のタグを紐づけ

記事の情報をSELECTしてみよう

この記事のゴールは、以下のように、エントリーID、記事タイトル、記事内容、タグ名(複数紐づいている場合はカンマ区切りで)をSELECTすることです。

エントリーID 記事タイトル 記事内容 タグ名
1 PHP記事 これはPHPに関する記事です。 PHP
2 C#記事 これはC#に関する記事です。 C#
3 PHP&MySQL記事 これはPHPとMySQLに関する記事です。 PHP,MySQL
4 雑記 これは雑記です。 NULL

外部結合を使ってみる

今回、テーブルはentry、tag、tag_mapの3つありますので、これらを外部結合で結合して、SELECTしてみましょう。

記事ID 記事タイトル 記事内容 タグ名
1 PHP記事 これはPHPに関する記事です。 PHP
2 C#記事 これはC#に関する記事です。 C#
3 PHP&MySQL記事 これはPHPとMySQLに関する記事です。 PHP
3 PHP&MySQL記事 これはPHPとMySQLに関する記事です。 MySQL
4 雑記 これは雑記です。 NULL
と、こうなります。

しかしこれでは、タグが複数紐づいている記事は2重に表示されてしまいますね。

そこでグループ化です。

グループ化してみる

entry.idでグループ化してみます。

記事ID 記事タイトル 記事内容 タグ名
1 PHP記事 これはPHPに関する記事です。 PHP
2 C#記事 これはC#に関する記事です。 C#
3 PHP&MySQL記事 これはPHPとMySQLに関する記事です。 PHP
4 雑記 これは雑記です。 NULL
おっと、これでは今度は、タグが複数紐づいている記事は、タグ名がひとつしか表示されません。グループ化してまとまってしまった複数のタグ名を、カンマ区切りで表示したいんですが、めんどくさそうですね。

しかし、便利な関数があります!

GROUP_CONCAT関数を使えば一発

GROUP_CONCAT関数は、区切り文字を指定すると、グループ化されてまとまった各値を、区切り文字で連結して吐き出してくれます。

GROUP_CONCAT(MySQL 5.6 リファレンスマニュアル)

この関数は、グループから連結された非 NULL 値を含む文字列の結果を返します。

記事ID 記事タイトル 記事内容 タグ名
1 PHP記事 これはPHPに関する記事です。 PHP
2 C#記事 これはC#に関する記事です。 C#
3 PHP&MySQL記事 これはPHPとMySQLに関する記事です。 PHP,MySQL
4 雑記 これは雑記です。 NULL
これで、複数タグはカンマ区切りで出力することに成功しました。

便利ですね!

最後に

これで、TOXI法によるタグ付け機能の実装の基本はご理解いただけたかと思います。

今後、記事にタグを追加したり、記事からタグを削除したりなどの操作も扱っていけたらと思います。

それでは、ありがとうございました。

スキルに自信がない20代でも、フリーランスになって月50万以上を稼げます。

最後に僕の実体験から、プログラマーが最も簡単に収入を上げる方法をお伝えします。

それは、フリーランスになることです。

 

エンジニアだったら誰でもフリーランスになれます。

業務経験が1年もあれば、月収50万が狙えます。

 

信じられないかもしれませんが、

フリーランスというのは稼げる働き方なのです。

 

僕は正社員でプログラマーをしていたのですが、

・終電帰りが当たり前
・上司に毎日怒鳴られる。
・手取り16万

という地獄のような環境が耐えられなくなり、

フリーランスになったら月収がいきなり60万になりました。

 

正直僕なんか、大したスキルはありません。

いつも下っ端の下請けプログラマーでした。

 

なのに収入は3倍になりました。

自信と健康とお金を手に入れることができました。

 

いつまでたっても上がらない正社員の給料にイライラしている方は、

是非フリーランスにチャレンジしてください。

 

プログラマーが最速で月収を上げる方法です。

 

・フリーランスなんて不安定じゃん。仕事見つからなかったらどうするの?

・仕事探しがだるい。

・転職活動なんかする暇ないんだよ

・俺のスキルじゃ無理なんだよ

 

僕もそう思ってビビってました。

ですが、思った以上に簡単でした。

 

思い込みというのは本当に恐ろしいです。

やれば行ける世界です。

 

そんな僕がフリーランスになって、

3年間働いても上がらなかった給料を、

一瞬で3倍に上げた方法を、以下の記事で書いています。


【月収20万円⇒月収60万円】価値ナシ貧乏プログラマーの僕が、7日間で収入が3倍になった物語

プログラミング
衣食住よりプログラミング

コメント

タイトルとURLをコピーしました