如果在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字符串问题的处理方法。