FIND_IN_SET函数是IN函数的升级版.功能类似.
区别在于:如果是常量,则可以直接用IN, 否则要用FIND_IN_SET()函数
MySQL中原型为:FIND_IN_SET(str,strlist)。 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间.
比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1、智能机,2、Andriod系统,3、小米系统,4、1000元以下.
我们如何用sql查找所有type中有4的1000元以下的手机呢?
以下为实际应用当中的SQL语句:
select * from mobile where FIND_IN_SET('4',type);
这个就可以找出所有1000元以下手机的记录!
假设有一张优惠券兑换码表
其中的coupon_ids对应优惠券表中的主键id,多个id用逗号分隔.
如何在查询的时候将优惠券id对应的名称都查出了?
先拆解,查询优惠券表,并显示优惠券名称
SELECT c.name FROM promotion_policy_config c WHERE FIND_IN_SET( c.id,'426,428');
将多个名称合并
SELECT GROUP_CONCAT(c.name) FROM promotion_policy_config c WHERE FIND_IN_SET( c.id,'426,428');
运用到完整的sql中
SELECT
`id`,
`exchange_code`,
`coupon_ids`,
(SELECT GROUP_CONCAT(c.name) FROM promotion_policy_config c WHERE FIND_IN_SET( c.id,a.coupon_ids)) AS 'couponName',
`user_id`,
CASE WHEN user_id=0 THEN ''
ELSE (SELECT b.`name` FROM user_base_info b WHERE b.user_id=a.user_id) END AS 'userName',
`used`,
`create_date`,
`exchange_date`,
`disabled`
FROM
`user_coupon_exchange` a;
这样就能将对应的名称全部查出来,并在一个字段展示.