MySQLのset型
MySQL独自に持ってる列挙型のENUM型とSET型。
ENUM型はラジオボタンみたいに択一。
SET型はチェックボックスみたいに多択。
代入時気にすることはなし。
STRICTかかってるとエラーだしてくれるみたいな記述みつけた。
そうじゃなくてもエラー出してくれんと困るから出してくれると思うけど……。
SET型の独自関数FIND_IN_SET関数。
FIND_IN_SET(データ内容,カラム名)
データ内容に関しては、指定された値の完全一致。
ワイルドカードは使用不可能なので、値にaを含むものを持つレコード、というような検索は不可能。
そのようなもので検索するなら、普通に「カラム名 LIKE '%a%'」でできるみたい。
結構な数のフィールドになる冗長なデータとかはこれで使うとすっきりしそう。
あとは、このフィールド自体には1,2,3……と数字だけ必要分(限界64だから全部でも)振っておいて、
別のテーブルにこの数字をIDにしてデータを格納して……ってやると、
テーブルをALTER TABLEで再定義という危ないというかちょっと処理上いやなことしなくても
可変長の仮想フィールドをつくれそうなので使いたいなー。
こういうことしたいの、って別SQLでもあるはずだけどどうやってるんだろう。
もしかしたらもっといい方法があるのかなぁ。
メモ:そろそろコメントかけないバグを直さないと僕のメモ追加がめんどくさい。
ENUM型はラジオボタンみたいに択一。
SET型はチェックボックスみたいに多択。
代入時気にすることはなし。
STRICTかかってるとエラーだしてくれるみたいな記述みつけた。
そうじゃなくてもエラー出してくれんと困るから出してくれると思うけど……。
SET型の独自関数FIND_IN_SET関数。
FIND_IN_SET(データ内容,カラム名)
データ内容に関しては、指定された値の完全一致。
ワイルドカードは使用不可能なので、値にaを含むものを持つレコード、というような検索は不可能。
そのようなもので検索するなら、普通に「カラム名 LIKE '%a%'」でできるみたい。
結構な数のフィールドになる冗長なデータとかはこれで使うとすっきりしそう。
あとは、このフィールド自体には1,2,3……と数字だけ必要分(限界64だから全部でも)振っておいて、
別のテーブルにこの数字をIDにしてデータを格納して……ってやると、
テーブルをALTER TABLEで再定義という危ないというかちょっと処理上いやなことしなくても
可変長の仮想フィールドをつくれそうなので使いたいなー。
こういうことしたいの、って別SQLでもあるはずだけどどうやってるんだろう。
もしかしたらもっといい方法があるのかなぁ。
メモ:そろそろコメントかけないバグを直さないと僕のメモ追加がめんどくさい。
|Dark Kingdom|みと|2010/12/29(Wed) 13:47:20|コメント(0)|トラックバック(0)|
この記事へのトラックバック
この記事のトラックバックURL
http://orange.grandaria.com/room/weblog.cgi?mode=trackback&id=15
コメント一覧
コメントする