2013-05-03 76 views
0

我有一列MEDIUMTEXT,其中包含來自goup_concat的值,其形式爲INT,INT,INT。我們可以稱之爲Concatenated_IDsMYSQL在字符串中找到INT

字符串的長度可以是1或更多。

我需要把它分解成原始值在某種程度上能夠做一些事情,如

SELECT 
    table_country.name 
FROM 
    table_country 
WHERE 
    table_country.country_id IN (
    SELECT 
    Concatenated_IDs 
    FROM 
    table_targeted_countries 
    WHERE 
    table_targeted_countries.email LIKE "%gmail.com") 

,並得到用戶與Gmail地址對象的登記的國名。

我已經考慮過爆炸的MEDIUMTEXT爲INT,每個INT創建一個行,有點像一個反向CONCAT,但我猜測它會採取一個大的過程

編輯:重新問題名稱

回答

4

你應該規範化該表,所以這些連接的ID存儲在一個單獨的表中,每個記錄一個ID。但在此同時,您可以使用MySQL的find_in_set()功能:

SELECT ... 
WHERE FIND_IN_SET(table_country.country_id, Concatenated_IDs) > 0 

相關的文檔:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

+0

謝謝你,FIND_IN_SET解決我的問題。 表將在未來的某個時間被標準化,它在一個很長的隊列中 – AdrianBR 2013-05-03 14:45:24

+0

如果您使用','前後綴所有字符串,LOCATE()也可以工作。例如LOCATE(CONCAT(',',id_to_find,','),CONCAT(',',Concatenated_IDs,','))'。然而,FIND_IN_SET()是爲此做的。 – 2013-05-03 15:09:02