MYSQL FIND_IN_SET()

来源:互联网 时间:1970-01-01

前一段时间在做一个关于多语言翻译需求的时候,遇到了一个关于查询的问题,怎么查询出一条记录的韩语已翻译,或者这条记录的韩语还未翻译,当时想的那肯定是要连表查询了,但我们组长一般是不允许我们连表查询的,除非表的记录很少。不连表,那怎么查询呢?后来经由同事知道了MySQL里面的find_in_set这个操作。

主表结构:

id    name  languages

存储的翻译的内容当然就在另外一个表了,这里就不多说了,这里的languages字段就存储的已经翻译的各种预言的简称,用逗号‘,’隔开,比如:

1    你好    en,fr,ko

2    早上好    en,ja

有可能有的人第一想法想到的是mysql的value in('a','b','c');这样的查询,但其实是不可以的,因为如果括号()里面的字符是固定不变的话,也可以查询,但现在这里是固定的表字段languages这个字段,里面的内容是变化的,mysql里面in是不支持这样的查询的,所以我们应选择find_in_set(),我们来看看这个操作:

SELECT * FROM table WHERE find_in_set('ja',languages)>=1;

$search代表要查询的语言,languages代表是表字段,即查找字段languages含有‘ja’字符的记录,也即是查找出被'ja'语言翻译过得记录,同样也可以查找出没有翻译的记录,即find_in_set()找不到字符串则返回0,可以这样写:

SELECT * FROM table WHERE find_in_set('ja',languages)=0;
这样就可以查找出ja语言还没翻译的记录,给翻译人员进行翻译。





相关阅读:
Top