mysql сравнивает два набора уникальных идентификаторов, которые имеют тип данных varchar и разделяются запятой - PullRequest
1 голос
/ 06 января 2011

В таблице есть поле, в котором я храню множество проиндексированных идентификаторов другой таблицы, разделенных запятой, например:

Таблица сэм

id - имя - gid

2 - саами - 23,12,43

gid - это ссылки на другую таблицу, которая

теперь со стороны клиента я отправляю некоторые гиды на сервер для сравнения

так что мне нужно сопоставить их с таблицей Сэма

ставки со стороны клиента могут быть в любом порядке, например 12,43,23 или 12,43,57

и я хочу сопоставить любое вхождение, например, если на стороне клиента значения gid равны 12,40,50, и если какое-либо поле в таблице имеет 12, то оно должно совпадать.

возможно ли с помощью sql или нам нужно сделать еще несколько шагов с большим количеством запросов?

Ответы [ 2 ]

1 голос
/ 06 января 2011

Вы можете использовать substring_index и find_in_set

mysql> select find_in_set(substring_index('12,40,50', ',', 1), '12,13,14');
+--------------------------------------------------------------+
| find_in_set(substring_index('12,40,50', ',', 1), '12,13,14') |
+--------------------------------------------------------------+
|                                                            1 |
+--------------------------------------------------------------+

mysql> select find_in_set(substring_index('12,40,50', ',', 1), '121,13,14');
+---------------------------------------------------------------+
| find_in_set(substring_index('12,40,50', ',', 1), '121,13,14') |
+---------------------------------------------------------------+
|                                                             0 |
+---------------------------------------------------------------+

НО , которые вы должны рассмотреть для нормализации структуры данных, ваш путь слишком ненормализован.

1 голос
/ 06 января 2011

Эй, используйте регулярное выражение в вашем запросе

$string = '12,50,56';
SELECT * from tablename where gids REGEXP [[:<:]].$string.[[:>:]]

Это будет соответствовать точному шаблону

Чтобы соответствовать любому полю, содержащему 12, используйте [[: <:]] </p>

Sanil

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