【发布时间】:2009-12-07 09:26:08
【问题描述】:
有没有办法从 MySQL 中的一串分隔值创建一个集合?例如:
'the,quick,brown,fox' => 'the','quick','brown','fox'
一种没有位摆弄的逆 EXPORT_SET。
问候
【问题讨论】:
有没有办法从 MySQL 中的一串分隔值创建一个集合?例如:
'the,quick,brown,fox' => 'the','quick','brown','fox'
一种没有位摆弄的逆 EXPORT_SET。
问候
【问题讨论】:
如果您尝试在 IN 语句中使用该集合,而不是拆分字符串,您可以进行如下比较:
SELECT * FROM `table` WHERE 'the,quick,brown,fox' REGEXP CONCAT('(^|,)','word','(,|$)');
如果您的数据集很大,我不确定这会有多有效,但它可能比读取临时表并从临时表中选择要快。
【讨论】:
在 MySQL 5.1.41 上测试:
DROP TABLE IF EXISTS n;
CREATE TEMPORARY TABLE n AS
SELECT -1 AS N UNION
SELECT -2 UNION
SELECT -3 UNION
SELECT -4 UNION
SELECT -5;
DROP TABLE IF EXISTS foo;
CREATE TABLE foo AS
SELECT 'the,quick,brown,fox' AS csv;
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(foo.csv, ',', n.n), ',', 1) AS word
FROM foo JOIN n
ON (LENGTH(REPLACE(foo.csv, ',', ''))-LENGTH(foo.csv) <= n.n+1);
结果:
+-------+
| word |
+-------+
| fox |
| brown |
| quick |
| the |
+-------+
【讨论】:
【讨论】:
FIND_IN_SET 不能解决您的问题吗?
【讨论】: