MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

转载 2015年11月21日 11:39:31
首先我们建立一张带有逗号分隔的字符串。
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) 

MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

首先我们建立一张带有逗号分隔的字符串。 CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCH...

MySQL 一表中字段内容是用逗号分隔的 另一表含有对应数据的两表联合查询

有时为了数据库简洁,存放数据的时候,某一字段采用逗号隔开的形式进行存储。 一般情况这个字段都应该具有如下几个共性。 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符这个...

逗号分隔存储 && mysql字符串函数初探

现在要做一个什么东西呢。n个人助力买东西之后可以参与摇一摇(p.s.除了幸运儿),摇一摇之前得支付。小弟的拙见是,依靠两个字段,一个存储有摇一摇资格ID(买过商品)shakeid,另一个是可以摇一摇的...

需求:MYSQL表中一个字段用逗号分隔,需要查出来split拆分并依次存入另一个表的一个字段中

需求:表中一个字段用逗号分隔,需要查出来split拆分并依次存入另一个表的一个字段中 假设问题是这丫那个的,table1中id=2的name值为'xiaoming,xiaohua,xiaowang,x...
  • shuanzia
  • shuanzia
  • 2015年10月14日 18:24
  • 19720

在MySQL字段中使用逗号分隔符的方法分享

大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性 被分割的字段一...
  • lzkIT
  • lzkIT
  • 2013年02月25日 21:43
  • 911

在MySQL字段中使用逗号分隔符的方法分享

大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性被分割的字段一定是有限而且数量较少的,我们不可能在一个字符...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法
举报原因:
原因补充:

(最多只允许输入30个字)