成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個MySQL字段包含多個ID的解決辦法

數據庫 MySQL
在MySQL數據庫中我們有時會遇到一個表中存著一個字段包含多個Id的問題,下文就教您一個處理該問題的方法,供您參考借鑒。

如果一個MySQL字段包含多個ID,應該如何解決呢?下面就為您介紹一個處理單個MySQL字段包含多個ID的處理方法,希望對您能有所啟迪。

以下是一個MySQL字段包含多個ID的解決辦法完整的例子。

1、新建表

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

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 5 下通過)

  1. DELIMITER $$  
  2.  
  3. DROP FUNCTION IF EXISTS fun_instr$$  
  4.  
  5. CREATE FUNCTION fun_instr(ns VARCHAR(100),s TEXT,isplit CHAR(1))  
  6.     RETURNS INT(8)  
  7.     BEGIN  
  8.  
  9.         DECLARE strPosition INT(8);  
  10.  
  11.         SET strPosition = FIND_IN_SET(ins,REPLACE(s,split,','));  
  12.         RETURN strPosition;  
  13.     END$$  
  14.  
  15. DELIMITER ;  
  16.  

#使用方法

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

B、當ID包含",",但是用別的符號分開時,如用"|"。用上面的方法是行不通的。我們有如下的解決辦法

  1. DELIMITER $$  
  2.  
  3. DROP FUNCTION IF EXISTS fun_custom_instr$$  
  4.  
  5. CREATE FUNCTION fun_custom_instr(ins VARCHAR(255),s TEXT,split VARCHAR(10))  
  6.     RETURNS INT(8)  
  7.     BEGIN  
  8.         DECLARE splitlen INT(2);  
  9.         DECLARE strPosition INT(8);  
  10.         SET splitLen = LENGTH(split);  
  11.         SET strPosition = 0;  
  12.         #第一段的字符相等  
  13.         IF s=ins THEN  
  14.                 RETURN 1;  
  15.         END IF;  
  16.         #中間段的字符相等  
  17.         WHILE INSTR(s,split)>0 DO  
  18.             SET strPositionstrPosition = strPosition + 1;  
  19.             IF LEFT(s,INSTR(s,split)-1)=ins THEN  
  20.                 RETURN strPosition;  
  21.             END IF;              
  22.             SET s = SUBSTRING(s,INSTR(s,split) + splitLen);  
  23.         END WHILE;  
  24.         #最一段的字符相等  
  25.         IF s=ins THEN  
  26.                 RETURN strPosition+1;  
  27.         END IF;  
  28.  
  29.         RETURN 0;  
  30.     END$$  
  31.  
  32. DELIMITER ;  
  33.  

#使用方法

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

5、總結
以上方法雖然能解決我們的問題,但數據量大的時候速度較慢。徹底的解決辦法是設計數據庫的時候按照數據庫的范式來做。
現在的空間基本已經不是問題,硬件已經很便宜了。


 

 

【編輯推薦】

MySQL截取字符串函數方法

MySQL多個條件判斷示例

MySQL字符串處理

MySQL大表重復字段的查詢方法

mysql查詢大小寫問題

責任編輯:段燃 來源: 互聯網
相關推薦

2010-10-09 13:41:42

MySQL字符串

2010-06-02 11:18:51

MySQL字段名

2011-03-04 13:07:47

Filezilla

2009-06-03 16:41:21

Eclipse亂碼Eclipse

2018-09-12 08:44:43

2010-06-01 08:54:36

MySQL忘記root

2009-05-31 09:07:35

Oracle鎖定

2011-01-19 17:54:48

2023-10-29 00:55:44

2017-06-21 08:30:20

MySQL原因解決辦法

2010-05-17 17:45:54

MySQL亂碼問題

2009-12-07 18:38:16

WCF異常

2011-06-17 11:10:51

Qt 中文 輸出

2009-02-18 09:30:10

AJAX跨域XML

2020-05-09 10:59:33

git cloneLinux文件

2010-01-15 09:38:08

磁盤被寫保護解決辦法

2017-05-04 20:15:51

iOSNSTimer循環引用

2015-01-23 09:20:32

2024-10-07 08:26:05

編程Python異常處理

2009-07-28 11:37:55

7類布線端口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91不卡| 一区影视| 久久久婷婷| 久草免费视 | 91久久国产综合久久91精品网站 | 日韩精品一区在线 | 亚洲欧美在线观看 | 久久久综合网 | 一级毛片在线播放 | 国产精品久久久久久久久久三级 | 精品久久久久久久人人人人传媒 | 欧美中文字幕一区二区三区亚洲 | 国产精品久久精品 | 久草综合在线 | 精品国产区 | 欧美激情久久久 | 国产美女视频一区 | 美女黄18岁以下禁止观看 | 午夜手机在线视频 | 古装三级在线播放 | 国产97在线视频 | 男人的天堂在线视频 | 日韩人体在线 | 韩日av在线| 日韩精品一区二区在线 | 午夜小视频在线观看 | 丝袜 亚洲 欧美 日韩 综合 | 亚洲福利一区二区 | 欧美精选一区二区 | 色橹橹欧美在线观看视频高清 | 一级欧美| 久久久精品网 | 精品国产乱码久久久久久闺蜜 | 中文字幕一区二区三区四区 | 午夜一区二区三区在线观看 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 91精品国产综合久久久久久 | 成人亚洲在线 | 毛片a级毛片免费播放100 | 精品视频一区二区三区在线观看 | 成人av看片 |