Mysql find_in_set массива разделителя - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть столбец user_orders, который мы храним как

[1][2][3][5]   // Expected output 1,2,3,5
[25][27]       // Expected output 25,27
[2]            // Expected output 2

Я не понимаю, почему мой главный магазин, как вышеупомянутый формат вместо данных через запятую, это по соображениям безопасности?

Как заменить это на 1,2,3,5 для использования в find_in_set (u.id, c.user_orders)?

Я попробовал вот так ниже URL

https://stackoverflow.com/questions/27262855/mysql-find-in-set-slash-separator

1 Ответ

0 голосов
/ 08 ноября 2018

Вместо того, чтобы пытаться преобразовать [1][2][3][4] в формат CSV, более простым способом было бы использовать REGEXP. Например, если вы хотите найти идентификатор 3, вы можете использовать:

SELECT *
FROM yourTable
WHERE user_orders REGEXP '[[:<:]]3[[:>:]]';

Если вы действительно хотите преобразовать свои данные в чистый CSV, вы можете сделать серию замен, например,

SELECT *
FROM yourTable
WHERE FIND_IN_SET('3', REPLACE(REPLACE(REPLACE(user_orders, '][', ','),
    '[', ''), ']', '')) > 0;

Но в целом, вам следует избегать хранения либо [1][2][3][4], либо 1,2,3,4, потому что оба они являются ненормализованными данными и, таким образом, сильно ограничивают способность MySQL делать что-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...