FIND_IN_SET函数

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;

这样就能将对应的名称全部查出来,并在一个字段展示.

猜你喜欢

转载自blog.csdn.net/qq_39940205/article/details/84673236