程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL字符串處理之一個字段包含多個ID的解決

MySQL字符串處理之一個字段包含多個ID的解決

編輯:MySQL綜合教程

如果在MySQL中一個表中存著一個字段包含多個Id,應該如何處理呢,下面就為您介紹這種MySQL字符串問題的處理方法,希望對您學習MySQL字符串方面能有所幫助。

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');  

3、查詢OpenRecord中Id為1包括的Category。

#錯誤的方法

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

#正確的方法

  1. select *   
  2.     from Category  
  3.     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不包含",",但是用別的符號分開時,如用"|"。我們有如下的解決辦法

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

以上就是該MySQL字符串問題的處理方法。

帶參數的MySql存儲過程

查看三種MySQL字符集的方法

帶您深入了解MySQL默認字符集

MySQL刪除外鍵定義的方法

使用MySQL外鍵的四個條件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved