2013-05-03 2 views
0

У меня есть столбец MEDIUMTEXT, который содержит значения, которые поступают из goup_concat, в виде INT, INT, INT. Мы можем назвать это Concatenated_IDsMYSQL найти INT в строке

Длина строки может быть 1 int или больше.

мне нужно разбить его на исходные значения каким-то образом, чтобы иметь возможность сделать что-то такое, как

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, создавая одну строку для каждого межд, вроде как обратный CONCAT, но я предполагаю, что потребуется ряд процедур

редактирования: переформулировать название вопроса

ответ

4

Вероятно, вы должны нормализовать эту таблицу, так что те контентированные идентификаторы сохраняются в отдельной таблице, по одному идентификатору на запись. Но в то же время, вы можете использовать функцию find_in_set() в MySQL:

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

+0

LOCATE() также будет работать, если вы префикс и суффикс всех строк с помощью «,». например 'LOCATE (CONCAT (',', id_to_find, ','), CONCAT (',', Concatenated_IDs, ','))'. Для этого сделано FIND_IN_SET(). – 2013-05-03 15:09:02

Смежные вопросы