mysql findinset

我们在sql中经常会遇到模糊匹配,但是有的地方却不能简单的用like来区分。比如有个新闻表里面有个type字段,他的存储新闻类型,有 1头条,2推荐....11娱乐,12热点,13图文...等等等等 现在有篇文章他既是 头条,又是热点,还是娱乐, type中以 2,12,11的格式存储. 我们如何用sql查找所有type中有2推荐类别的文章呢。这里我们就可以用到find_in_set函数。精确的匹配到我们想要的记录。

find_in_set(str1,str2) 函数:返回str2中str1所在的位置索引,其中str2必须以","分割开。

工具/原料

  • mysql
  • find_in_set(str,list)

方法/步骤

  1. 1

    使用语法:

    select * form table where FIND_IN_SET(str,strlist)。

    mysql以","分隔的精确匹配方法
  2. 2

    举个例子,首先建一个简单的新闻表。

    mysql以","分隔的精确匹配方法
  3. 3

    录入以下数据。

    mysql以","分隔的精确匹配方法
  4. 4

    现在我们想要获取type为2这种类型的新闻。如果用like的话不好实现。因为12,2里都包含了2.

    这里我们得用find_in_set来查找:

    语句:

    select * from t_news where FIND_IN_SET(2,type);

    看结果,我们就可以看出很容易就找到了对应的记录。

    mysql以","分隔的精确匹配方法
  5. 5

    如果用like的话,会找到错误的记录(我们不想要的记录)。可见这里的find_in_set还是很有用的。

    mysql以","分隔的精确匹配方法
  6. 6

    find_in_set(str1,str2)还可以查找到str1所在str2中位置。

    同样适用上面的例子数据。

    sql语句:

    select FIND_IN_SET(2,type) from t_news

    mysql以","分隔的精确匹配方法
  7. 7

    还可以适用find_in_set来强制排序。

    我们修改一下新闻表数据。

    如图:

    mysql以","分隔的精确匹配方法
  8. 8

    现在我们有一个需求,需要根据type为2,1,3这种顺序排序。

    sql语句:

    select * from t_news order by find_in_set(type,'2,1,3');

    结果:

    mysql以","分隔的精确匹配方法

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值