【超便利!】昔のファミコンはすべてこうだ、MySQL ビット演算で複数フラグ管理する方法
データベース(MySQL)
■演算子
& :論理積 (例:$x & $y )
| :論理和 (例:$x | $y、-$z)
^ :排他的論理和(例:$x ^ $y)
<< :$x を $y ビット左にシフト(例:$x << $y)
>> :$x を $y ビット右にシフト(例:$x >> $y)
~ : $x のビットを反転(例:~$x)
状態異常表
# 状態異常名 状態異常物理名 2 進数 10 進数 1 通常 NORMAL 000000 0 2 死亡 DEATH 000001 1 3 毒 POISON 000010 2 4 睡眠 SLEEP 000100 4 5 石化 PETRIFIED 001000 8 6 混乱 CONFUSION 010000 16 7 麻痺 PARALYSIS 100000 32 道具表
# 道具名 道具物理名 2 進数 説明 1 不死鳥の尾 FUSHICHONOO 000001 死亡状態を回復 2 毒消し DOKUKESHI 000010 毒状態を回復 3 眠眠打破 MINMINDAHA 000100 睡眠状態を回復 4 万能薬 BANNOUYAKU 111110 死亡以外の状態異常を回復 (引用:http://tetsuwo.tumblr.com/post/133001449227/php-bitmask-flags-control)
■フラグ管理用のテーブルを作成する
CREATE TABLE user_statuses (
user_id INT UNSIGNED,
status TINYINT UNSIGNED DEFAULT 0
);
TINYINT(UNSIGNED) は 0 ~ 255(8bit)までなので 8 つのフラグを管理できる。
もちろん、データの型を多くすれば管理できるフラグも増えます
■ユーザー追加
INSERT INTO user_statuses VALUES(1, 0);
■毒を追加
UPDATE user_statuses SET status = status | 0b000010 WHERE user_id = 1;
■毒追加を確認する
SELECT user_id, status, CONV(status, 10, 2) FROM user_statuses;
■麻痺を追加
UPDATE user_statuses SET status = status | 0b100000 WHERE user_id = 1;
■麻痺を確認する
SELECT user_id, status, CONV(status, 10, 2) FROM user_statuses;
■毒消しを使う
UPDATE user_statuses SET status = status & ~0b000010 WHERE user_id = 1;
■毒消し効果を確認する
SELECT user_id, status, CONV(status, 10, 2) FROM user_statuses;
■万能薬を使う
UPDATE user_statuses SET status = status & ~0b111110 WHERE user_id = 1;
■万農薬の効果を確認する
SELECT user_id, status, CONV(status, 10, 2) FROM user_statuses;
豆情報:PHP関数
bindec() - 2 進数 を 10 進数に変換する
Warning: Undefined variable $postID in /home/foodheart/flashbuilder-job.com/public_html/wp-content/themes/stingerplus/single.php on line 87