mysql在单列中搜索多个子字符串

时间:2014-10-04 19:28:26

标签: mysql where-clause

我需要一种有效的方法来搜索表的同一列中的多个子字符串。以下是我创建的示例表和低效查询。任何人都可以帮助我让它变得更有活力。

id | column_2 | column_2
1  | 65,35    | 14,13,20
2  | 41,15,16 | 10,21,23
3  | 12,14,15 | 10,12,20

SELECT * FROM `table1` WHERE `column_2` LIKE '%10%' AND `column_2` LIKE '%23%';

这些值很长,而且条件也是动态的。那么有没有有效的方法来创建删除和条件(有)的查询。

2 个答案:

答案 0 :(得分:2)

我从这里获取了SPLIT_STR函数:MYSQL - Array data type, split string,

我们的数据集

假设我们有以下数据集;

select * from a_table;
+----+-------------+
| id | column2     |
+----+-------------+
|  1 | 10,11,23    |
|  2 | 5,14,23     |
|  3 | 2,18        |
|  4 | 23,10,11    |
|  5 | 230,100,110 |
|  6 | 11,100      |
+----+-------------+
6 rows in set

功能

然后我们创建函数(在上面引用);

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

最终查询

从那里,我们可以做一个简单的查询;

SELECT id from a_table WHERE SPLIT_STR(column2, ",", 1) IN (10,23)

这将给出以下结果集;

SELECT id from a_table WHERE SPLIT_STR(column2, ",", 1) IN(10,23);
+----+
| id |
+----+
|  1 |
|  4 |
+----+
2 rows in set

添加更多数字

要添加更多数字,只需添加到IN()函数 - 以逗号分隔的值。

一张便条

深入考虑this

  

不要将逗号分隔值存储在单个列中。您对查询的问题直接来自那个糟糕的设计选择。 - a_horse_with_no_name

答案 1 :(得分:2)

要搜索在mysql表结构中,您可以使用某种方式

  1. 使用%search string%

  2. 搜索 like operator
  3. 您可以使用内置函数FIND_IN_SET()

  4. 的mysql

     SELECT  *
     FROM    tableName
     WHERE   FIND_IN_SET('10', column name)  AND
     FIND_IN_SET('23', column name)
    
    1. 您可以使用的第三种方法是通过附加搜索关键字从您的编程代码创建一个字符串,以在表格中搜索相应的序列。