您现在的位置: 首页php+mysql>正文
MYSQL查询字段中包含以逗号分隔的字符串
2012年11月14日 php+mysql 暂无评论

建表
CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50) NOT NULL);
插入测试数据
INSERT INTO test(pname,pnum) VALUES('产品1','1,2,4');
INSERT INTO test(pname,pnum) VALUES('产品2','2,4,7');
INSERT INTO test(pname,pnum) VALUES('产品3','3,4');
INSERT INTO test(pname,pnum) VALUES('产品4','1,7,8,9');
INSERT INTO test(pname,pnum) VALUES('产品5','33,4');

查找pnum字段中包含3或者9的记录
mysql> SELECT * FROM test WHERE find_in_set('3',pnum) OR find_in_set('9',pnum);
+----+-------+---------+
| id | pname | pnum??? |
+----+-------+---------+
|? 3 | 产品3 | 3,4???? |
|? 4 | 产品4 | 1,7,8,9 |
+----+-------+---------+
2 rows in set (0.03 sec)

使用正则
mysql> SELECT * FROM test WHERE pnum REGEXP '(3|9)';
+----+-------+---------+
| id | pname | pnum??? |
+----+-------+---------+
|? 3 | 产品3 | 3,4???? |
|? 4 | 产品4 | 1,7,8,9 |
|? 5 | 产品5 | 33,4??? |
+----+-------+---------+
3 rows in set (0.02 sec)
这样会产生多条记录,比如33也被查找出来了,不过MYSQL还可以使用正则,挺有意思的

find_in_set()函数返回的所在的位置,如果不存在就返回0
mysql> SELECT find_in_set('e','h,e,l,l,o');
+------------------------------+
| find_in_set('e','h,e,l,l,o') |
+------------------------------+
|??????????????????????????? 2 |
+------------------------------+
1 row in set (0.00 sec)

还可以用来排序,如下;
mysql> SELECT * FROM TEST WHERE id in(4,2,3);
+----+-------+---------+
| id | pname | pnum??? |
+----+-------+---------+
|? 2 | 产品2 | 2,4,7?? |
|? 3 | 产品3 | 3,4???? |
|? 4 | 产品4 | 1,7,8,9 |
+----+-------+---------+
3 rows in set (0.03 sec)

如果想要按照ID为4,2,3这样排序呢?
mysql> SELECT * FROM TEST WHERE id in(4,2,3) ORDER BY find_in_set(id,'4,2,3');
+----+-------+---------+
| id | pname | pnum??? |
+----+-------+---------+
|? 4 | 产品4 | 1,7,8,9 |
|? 2 | 产品2 | 2,4,7?? |
|? 3 | 产品3 | 3,4???? |
+----+-------+---------+
3 rows in set (0.03 sec)

给我留言


  • 湖州德清县启动首批“潜力医师”项目 2018-07-25
  • 福建竹农联名写信:幸福生活节节高 祖国明天更美好 2018-07-24
  • 我的跟帖出不来,讨论不了,奈何?还以为版主护着我么?! 2018-07-23
  • 光明地产进入怡心湖板块,十陵流拍“扶不起”? ——凤凰网房产成都 2018-07-23
  • 外媒:“习莫会”为中印友谊注入活力} 2018-07-22
  • “关注泌尿健康”三金片媒体沙龙北京站 2018-07-21
  • “野鸡大学”重出江湖, 高招防骗别留死角 2018-07-21
  • 日本樱岛火山大规模喷发 2018-07-20
  • 炎炎夏日要怎么养生? 这些妙招不错! 2018-07-20
  • 杭州西湖天气,杭州西湖天气预报,杭州西湖天气预报一周 2018-07-19
  • 288| 946| 185| 863| 685| 515| 203| 509| 962| 207|