案例:儲存使用者的興趣愛好,多選。
一個人肯定有打籃球,看書等多個愛好。
表:users
使用者表、hobbys
興趣愛好表、user_has_hobbys
使用者與興趣愛好關聯表
欄位:hobby(int)
,資料儲存方式:1,2,3
。1代表籃球 2代表看書 3代表足球
目前自己認為的最好方法
//model 裡定義(hobby)欄位
const HOBBY_BASKETBALL = 1 << 0;//籃球(1)
const HOBBY_READ_BOOK = 1 << 1;//看書(2)
const HOBBY_FOOTBALL = 1 << 2;//足球(4)
//資料表(users)
id(使用者ID) hobby(興趣) name(使用者名稱)
1 1 小花
2 2 小紅
3 3 小張
4 4 小軍
5 5 小明
6 6 小李
7 7 小天
實操查詢
# 查詢興趣愛好為看書的
SELECT id,hobby,name FROM users WHERE hobby & 2
//結果為id:2,3,6,7
# 查詢興趣愛好為籃球or看書or足球(1+2+4=7)的
SELECT id,hobby,name FROM users WHERE hobby & 7
//結果為id:1,2,3,4,5,6,7
# 查詢興趣愛好為籃球and看書and足球(1+2+4=7)的
SELECT id,hobby,name FROM users WHERE hobby & 7 = 7
//結果為id:7
#查詢的時候只用把要查詢的興趣愛好相加(前端傳值也是一樣相加),即可,簡單方法,省事,高效
看不懂位運算 可搜尋看原碼、反碼、補碼資料,以及看下面解釋
//欄位欄位hobby(int)
1 (0001):代表籃球;第一位
2 (0010):代表看書;第二位
4 (0100):代表足球;第三位
3(0001+0010=0011):代表籃球、看書;
5(0001+0100=0101):代表籃球、足球;
6(0010+0100=0110):表示看書、足球;
7(0001+0010+0100=0111):表示籃球、看書、足球;
本作品採用《CC 協議》,轉載必須註明作者和本文連結