zoukankan      html  css  js  c++  java
  • mysql find_in_set

    如果我的表里面,有一个字段是tag,它是由一些数字或字符串用 "," 组合起来的,现在我需要统计一下这个表里面tag字段含有关键字key的数目

    比如我现在tag是一些数字用 "," 组合起来的,我现在想查询tag包含数字1的行有多少条,一开始的查询语句是这样的:

    select count(*) from comment where tag like '%1%';

    对于tag的范围在0-9不会出现什么问题,但是呢,如果tag包含11、12、13等,这个统计就会多出几条

    想过要优化下查询语句,改成:

    select count(*) from comment wheretag like ',1%' or '%1,';

    但是这个这样好像也会统计出错

    后面看到了mysql的find_in_set函数,可以完美的解决这个问题

    先看下官方文档:

    FIND_IN_SET(str,strlist)

    Returns a value in the range of 1 to N if the string str is in the string list strlist consisting of N substrings. A string list is a string composed of substrings separated by , characters. If the first argument is a constant string and the second is a column of type SET, the FIND_IN_SET() function is optimized to use bit arithmetic. Returns 0 if str is not in strlist or if strlist is the empty string. Returns NULL if either argument is NULL. This function does not work properly if the first argument contains a comma (,) character.

    mysql> SELECT FIND_IN_SET('b','a,b,c,d');
            -> 2

    使用find_in_set效率相对like要高不少,而且支持字符串的匹配,附上查询语句:

    select count(*) from comment where find_in_set('1',tag);
    select count(*) from comment where find_in_set('abc',tag);

    拓展:

    如果需要统计多种类型的数目,一次一次查太费劲了,使用sum跟if一次性查出符合要求的数据

    select  sum(if(find_in_set('1',tag),1,0)) as 'a',
            sum(if(find_in_set('2',tag),1,0)) as 'b',
            sum(if(find_in_set('3',tag),1,0)) as 'c',
            sum(if(find_in_set('4',tag),1,0)) as 'd',
            sum(if(find_in_set('5',tag),1,0)) as 'e',
            sum(if(find_in_set('6',tag),1,0)) as 'f',
            sum(if(find_in_set('7',tag),1,0)) as 'g',
            sum(if(find_in_set('8',tag),1,0)) as 'h',
            sum(if(find_in_set('9',tag),1,0)) as 'i',
            sum(if(find_in_set('10',tag),1,0)) as 'j'
            from comment;

    ->
  • 相关阅读:
    c++11 内存模型解读
    无锁队列的实现
    c++中的原子操作
    还是说Memory Model,gcc的__sync_synchronize真是太坑爹了
    对于Linux平台下C语言开发中__sync_函数的认识
    理解 Memory barrier
    pthread_barrier_init,pthread_barrier_wait简介
    explicit构造函数的作用
    droofs
    27.
  • 原文地址:https://www.cnblogs.com/lyc94620/p/10002740.html
Copyright © 2011-2022 走看看