2009-12-07 485 views
4

有沒有一種方法可以從MySQL中的一串分隔值創建一個集合?例如:從字符串創建一個MySQL SET

'的,快速的,棕色,狐狸' => '的', '快', '褐色', '狐狸'

A排序逆EXPORT_SET的無位fiddeling。

問候

回答

2

如果你想使用一個IN語句集,而不是分裂的字符串,你可以做這樣的比較:

SELECT * FROM `table` WHERE 'the,quick,brown,fox' REGEXP CONCAT('(^|,)','word','(,|$)'); 

我不知道如何高效這將是如果你的數據集很大,但它可能比讀入和從臨時表中選擇更快。

1

測試在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 | 
+-------+ 
0

難道FIND_IN_SET解決問題了嗎?

FIND_IN_SET()

+0

FIND_IN_SET非常慢,因爲它強制進行全面掃描 – dresende 2015-05-08 11:41:23