今天遇到一個需求,簡單點來說就是有一個核取方塊的選項如下:
愛好: 籃球 ☑ 足球 ☑ 羽毛球 ☑
在資料庫中的儲存有一下2種思路:
1 定義一個欄位 hobby tinyint 1籃球 2足球 3羽毛球 4籃球+足球 5籃球+羽毛球 6籃球+羽毛球 7足球+羽毛球 8籃球+足球+羽毛球
即:把這三個選項進行排列組合找出每種情況進行儲存
這樣做可以滿足業務的需求,但是如果要是將來再新增一個選項的話,那麼將是一場災難。
2 使用php 中的&運算子 按位與運算子
定義如下
2籃球 4足球 8 羽毛球
資料庫中的hobby欄位儲存的就是選擇後的和,這樣在進行編輯或者獲取這個使用者的愛好的時候只要做一次按位與&運算就行了
例子:
如果我選擇了籃球 足球 乒乓球 則資料庫存的是所有之和 14 在編輯的時候只需要從資料庫裡的 14 和選項做與 & 運算 大於0 說明選擇了 小於0則說明沒有選擇 $res = 14 & $pingpong;輸出8 var_dump($res);