mySQL字符串处理之一个字段包含多个ID的解决

1、新建表

 
 
  1. drop table if exists Category;  
  2. create table Category  
  3. (  
  4.     cateId                         int(5)                         not null AUTO_INCREMENT,  
  5.     chiName                        varchar(80),  
  6.    primary key (cateId)  
  7. );  
  8.  
  9. drop table if exists OpenRecord;  
  10. create table OpenRecord  
  11. (  
  12.     opreId                         int(5)                         not null AUTO_INCREMENT,  
  13.     cateIds                        varchar(80),  
  14.    primary key (opreId)                      
  15. );  

2、初始化数据

   
   
  1. insert Category(chiName) values ('fish'),('shrimp'),('crab'),('tiger');  
  2.  
  3. insert OpenRecord(cateIds) values('1,2');  
  4. insert OpenRecord(cateIds) values('2,3');

#正确的方法

   
   
  1. select *   
  2.     from Category  
  3.     where (select FIND_IN_SET(cateId,cateIds) from OpenRecord where opreId=1)

4、扩展会出现的问题。
用FIND_IN_SET可以解决ID是用","号隔开的问题。然而会有另外的两种情况。

A、当ID不包含",",但是用别的符号分开时,如用"|"。我们有如下的解决办法

     
     
  1. select *   
  2.     from Category  
  3.     where (select FIND_IN_SET(cateId,REPLACE(cateIds,'|',',')) from OpenRecord where opreId=1)  


MySQL提供了一些字符串处理函数,如REPEAT、LOAD_FILE和INSERT等。REPEAT函数可以将一个字符串重复多次,例如REPEAT("MySQL", 3)的结果是"MySQLMySQLMySQL"。LOAD_FILE函数可以读取文件并将其以字符串的格式返回,可以用于更新表中的blob_column字段。例如,UPDATE tbl_name SET blob_column=LOAD_FILE('/tmp/picture') WHERE id=1可以将文件内容写入表中的对应字段。INSERT函数可以将一个字符串中的部分字符替换为新的字符串。具体操作是将字符串str中从位置pos开始长度为len的子字符串替换为newstr。如果pos超过字符串长度,将返回原始字符串。如果len大于其他字符串的长度,则从位置pos开始替换。如果任何参数为null,则返回值为null[3]。以上是一些常见的MySQL字符串处理函数,可以根据具体需求使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL字符串处理](https://blog.csdn.net/weixin_42250577/article/details/120491170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mysql中的字符串处理函数(v5.1)](https://blog.csdn.net/Shaohuicheng/article/details/5977107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值