如果在MySQL中一个表中存着一个字段包含多个Id,应该如何处理呢,下面就为您介绍这种MySQL字符串问题的处理方法,希望对您学习MySQL字符串方面能有所帮助 。
1、新建表
- drop table if exists Category;
- create table Category
- (
- cateId int(5) not null AUTO_INCREMENT,
- chiName varchar(80),
- primary key (cateId)
- );
-
- drop table if exists OpenRecord;
- create table OpenRecord
- (
- opreId int(5) not null AUTO_INCREMENT,
- cateIds varchar(80),
- primary key (opreId)
- );
2、初始化数据
- insert Category(chiName) values (fish),(shrimp),(crab),(tiger);
-
- insert OpenRecord(cateIds) values(1,2);
- insert OpenRecord(cateIds) values(2,3);
3、查询OpenRecord中Id为1包括的Category 。
#错误的方法
- select *
- from Category
- where (select INSTR(cateIds,cateId) from OpenRecord where opreId=1)
#正确的方法
- select *
- from Category
- where (select FIND_IN_SET(cateId,cateIds) from OpenRecord where opreId=1)
用INSTR会出现当ID大于10的时候,查ID为1的数据,会把1,10,11,12......的都拿出来 。
4、扩展会出现的问题 。
用FIND_IN_SET可以解决ID是用","号隔开的问题 。然而会有另外的两种情况 。
A、当ID不包含",",但是用别的符号分开时,如用"|" 。我们有如下的解决办法
- select *
- from Category
- where (select FIND_IN_SET(cateId,REPLACE(cateIds,|,,)) from OpenRecord where opreId=1)
以上就是该MySQL字符串问题的处理方法 。