裏MySQLクエリー入門(16) 番外編2 ENUM型 SET型
カテゴリーの最大数を64以下にすることが可能であれば、カンマ区切りのvarchar型のように非効率な方法ではなく、ビットをフラグとして使うことによって効率よく格納できます。
ALTER TABLE `platform` ADD `set_program_id` BIGINT NOT NULL COMMENT 'プログラムIDのbitセット' UPDATE platform SET set_program_id=elt(platform_id, (1<<1|1<<2|1<<3)>>1, (1<<1|1<<2|1<<3)>>1, (1<<1|1<<2|1<<3|1<<4)>>1, (1<<4)>>1, (1<<1|1<<2)>>1 ) SELECT platform_id,platform_name, MAKE_SET(set_program_id,'JAVA','ActionScript','PHP','Objective-C') set_program_id FROM platform
MySQLではこのビットをフラグとして格納する方式のSET型というものがあります。内部の構造は同じな為ALTER TABLEでSET型に変更してもそのまま使用することができます。また、MAKE_SETを使用することなく自動で変換されます。
ALTER TABLE `platform` CHANGE `set_program_id` `set_program_id` SET( 'JAVA', 'ActionScript', 'PHP', 'Objective-C' ) NOT NULL COMMENT 'プログラムIDのbitセット' SELECT * FROM platform