mysqlのIN()とFIND_IN_SET()


文字列strがNサブチェーンからなる文字列リストstrlistにある場合、戻り値の範囲は1~Nです.1つの文字列リストは、「,」記号で区切られたいくつかの自己チェーンからなる文字列です.最初のパラメータが定数文字列で、2番目がtype SET列の場合、FIND_IN_SET()関数を最適化し,ビット計算を用いた.strがstrlistまたはstrlistで空の文字列でない場合、戻り値は0です.いずれかのパラメータがNULLの場合、NULLが返されます.この関数は、最初のパラメータにカンマ(',')が含まれている場合に正常に動作しません.
mysql> SELECT FIND_IN_SET('b','a,b,c,d'); //-> 2

mysqlはこのようなクエリーselect id,list,name from table where'daodao'IN(list);(一)注:1.tableには、3つのフィールドid:int、list:varchar(255)、name:varchar(255)が含まれています.
実際にはできません.これにより、「daodao」がリストの最初の要素である場合にのみ、クエリーが有効になります.そうしないと、「daodao」が本当にリストに含まれていても、結果は得られません.
CREATE TABLE `test` (
  `id` int(8) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `list` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
)
INSERT INTO `test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu'); 

test1:sql = select * from `test` where 'daodao' IN (`list`);
結果の空の値が得る.
test2:sql = select * from `test` where FIND_IN_SET('daodao',`list`);
3つのデータが得られた.
1, 'name', 'daodao,xiaohu,xiaoqin'  
2, 'name2', 'xiaohu,daodao,xiaoqin'
3, 'name3', 'xiaoqin,daodao,xiaohu'