有沒有一種方法可以從MySQL中的一串分隔值創建一個集合?例如:從字符串創建一個MySQL SET
'的,快速的,棕色,狐狸' => '的', '快', '褐色', '狐狸'
A排序逆EXPORT_SET的無位fiddeling。
問候
有沒有一種方法可以從MySQL中的一串分隔值創建一個集合?例如:從字符串創建一個MySQL SET
'的,快速的,棕色,狐狸' => '的', '快', '褐色', '狐狸'
A排序逆EXPORT_SET的無位fiddeling。
問候
如果你想使用一個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解決問題了嗎?
FIND_IN_SET非常慢,因爲它強制進行全面掃描 – dresende 2015-05-08 11:41:23