有這樣一個需求,在Mysql數據庫字符串字段(權限)中,有范圍在 1 到 N 之間代表不同權限的值,分別被‘,’分開,現在要取出具有某權限的所有成員列表。
創建表:
1 |
CREATE TABLE users(id int (6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),name VARCHAR(20) NOT NULL,limits VARCHAR(50) NOT NULL); |
添加數據:
1 |
INSERT INTO users(name, limits) VALUES( '小張' , '1,2,12' ); |
2 |
INSERT INTO users(name, limits) VALUES( '小王' , '11,22,32' ); |
Mysql 中有些字段是字符串類型的,如何查找其中包含某些字符的記錄呢?
方法一:
1 |
mysql> SELECT * FROM users WHERE limits like "%2%" ; |
2 |
+----+----+--------+ |
3 |
| id |name| limits | |
4 |
+----+----+--------+ |
5 |
| 1 |小張| 1,2,12 | |
6 |
+----+----+--------+ |
7 |
| 2 |小王|11,22,32| |
8 |
+----+----+--------+ |
9 |
2 row in set |
這樣第二條數據不具有權限‘2’的用戶也查出來了,不符合預期。所以就查閱了手冊,利用mysql 字符串函數 find_in_set()。
方法二:
1 |
mysql> SELECT * FROM users WHERE find_in_set( '2' , limits); |
2 |
+----+----+--------+ |
3 |
| id |name| limits | |
4 |
+----+----+--------+ |
5 |
| 1 |小張| 1,2,12 | |
6 |
+----+----+--------+ |
7 |
1 row in set |
這樣就能達到我們預期的效果,問題就解決了!
注意:mysql字符串函數 find_in_set(str1,str2)函數是返回str2中str1所在的位置索引,str2必須以","分割開。