我需要一种有效的方法来搜索表的同一列中的多个子字符串。以下是我创建的示例表和低效查询。任何人都可以帮助我让它变得更有活力。
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%';
这些值很长,而且条件也是动态的。那么有没有有效的方法来创建删除和条件(有)的查询。
答案 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表结构中,您可以使用某种方式
使用%search string%
您可以使用内置函数FIND_IN_SET()
SELECT *
FROM tableName
WHERE FIND_IN_SET('10', column name) AND
FIND_IN_SET('23', column name)