首页  >  问答  >  正文

php - mysql查询方式疑问

现有数据表T里面的字段“A”,A的值通常为:“12,123,312,1212” 形式。T中已有数据10W条。

需要查询出A中含有单独"12"的记录~

比如:
"123,125,1212,1234,312" 不含有单独的一个"12" 不要
"1,18,123,1212,321,312" 不含有单独的一个"12" 不要
"1,12,123,1212,321,312" 含有单独的一个"12" 要
...

我有2种查询方法,感觉有点繁琐~ 一个是CONCAT,一个是LIKE OR

问问大家有没有更高效的方法,拜谢~

PHPzPHPz2722 天前622

全部回复(1)我来回复

  • 仅有的幸福

    仅有的幸福2017-05-31 10:36:41

    可以考虑给字段A添加全文索引,使用进行全文检索:

    ALTER TABLE `T` ADD FULLTEXT (`A`);
    
    SELECT `id` FROM `T` 
    WHERE MATCH(`A`) AGAINST('12' IN BOOLEAN MODE) 
    ORDER BY `id` DESC LIMIT 10 OFFSET 0;

    需要注意的是:
    MySQL5.6.4的 innodb_ft_min_token_size 的默认值为3.
    MyISAM的 ft_min_word_len 的默认值为4.
    如果你要索引的最小长度是2,那就要在my.cnf配置:
    innodb_ft_min_token_size=2
    ft_min_word_len=2

    回复
    0
  • 取消回复