SQL получает идентификатор из столбца, где идентификаторы разделены запятыми - PullRequest
0 голосов
/ 07 мая 2018

У меня есть столбец с именем id с кучей идентификаторов, разделенных запятыми, например:

asdaxxdfd2,wwfsfdssdfsd6,sdfdsfdsed2,23445rr55

Мне нужно сопоставить идентификатор из столбца с существующим $user_id

Попытка этого не сделала:

"SELECT id FROM my_table WHERE id LIKE '%" . $user_id . "%'";

Не уверен, что еще я могу сделать.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 22 мая 2018
SELECT * FROM tbl WHERE id REGEXP "[[:<:]]$user_id[[:>:]]";

Они соответствуют "границам слов", таким образом обрабатывая начало и конец строки.

Но без нормализации невозможно создать запрос, который выполняется быстрее, чем полное сканирование таблицы.

0 голосов
/ 07 мая 2018

Ваш вопрос немного двусмысленный, я не знаю, является ли это решение тем, что вы намереваетесь:

SELECT REGEXP_SUBSTR(id, '[^,]+', 1, 1) COLUMN_1,
        REGEXP_SUBSTR(id, '[^,]+', 1, 2) COLUMN_2,
FROM my_table;

or just

SELECT id
FROM my_table
WHERE id LIKE '%wwfsfdssdfsd6%'
0 голосов
/ 07 мая 2018
SELECT REGEXP_SUBSTR(id," . $user_id . ") UserID FROM my_table;

Это вернет соответствующий идентификатор пользователя, но снова использование базы данных со значениями, хранящимися в одной строке, никогда не будет хорошей идеей.

0 голосов
/ 07 мая 2018
"SELECT id FROM my_table WHERE concat(',', id, ',') LIKE '%," . $user_id . ",%';"

должен это сделать.

Но я также настоятельно рекомендую нормализовать схему.

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