MYSQL FIND_IN_SET()

前一段时间在做一个关于多语言翻译需求的时候,遇到了一个关于查询的问题,怎么查询出一条记录的韩语已翻译,或者这条记录的韩语还未翻译,当时想的那肯定是要连表查询了,但我们组长一般是不允许我们连表查询的,除非表的记录很少。不连表,那怎么查询呢?后来经由同事知道了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语言还没翻译的记录,给翻译人员进行翻译。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值