2014-12-29 4 views
3

У меня есть набор базы данных, которая выглядит примерно такMySQL FIND_IN_SET() с запятой вместо запятой-х

Table: Notes 
    nid | forDepts 
    -------------- 
    1 | 1;2;4 
    2 | 4;5 


Table: Positions 
    id | name 
    -------------- 
    1 | Executive 
    2 | Corp Admin 
    3 | Sales 
    4 | Art 
    5 | Marketing 

Этот запрос будет работать, если данные в forDepts был разделен запятая-х

SELECT a.nid, 
     GROUP_CONCAT(b.name ORDER BY b.id) DepartmentName 
FROM Notes a 
     INNER JOIN Positions b 
      ON FIND_IN_SET(b.id, a.forDepts) > 0 
GROUP BY a.nid 

есть ли способ сопоставить его с разделителем с запятой? Или есть лучший способ сделать это? Обе мои таблицы довольно большие (5336 и 930 строк).

Я мог сделать 2 запроса и взорваться на ; и соответствующим образом соответствовать, но если есть лучший способ, который можно сделать в одном запросе, это было бы здорово.

Вот мой sqlfiddle

+1

Вместо того, чтобы искать решения по этому вопросу, вы должны действительно избавиться от значений, разделенных запятой в столбце. Читайте о нормализации. У вас будет больше проблем с этим дизайном схемы. – fancyPants

ответ

3

Вы можете заменить commata:

FIND_IN_SET(b.id ,REPLACE(a.forDepts, ';', ',')) 
+0

lol, полностью забыл о 'REPLACE()' спасибо. отлично работает – user2636556

+1

Нет проблем, если это решает ваш вопрос, пожалуйста, примите его, чтобы показать другому пользователю, что это действительный ответ. – bish

+0

yup будет делать, подождать еще 3 минуты. :) – user2636556

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