Как сравнить одно значение среди значений, разделенных запятыми, в столбце базы данных с помощью Select Query? - PullRequest
0 голосов
/ 26 января 2011

У меня есть значение, скажем, например "1", и у меня есть столбец "grp_id" в моей таблице БД "tbl_grp". Этот столбец "grp_id" содержит запятые значения в качестве примера "1,2,3" Я ищу способ сравнить мое единственное значение со столбцом "grp_id".

сейчас я использую следующий запрос:

"SELECT user_id, user_fname, user_lname FROM tbl_grp WHERE grp_id='1'";

Ответы [ 4 ]

3 голосов
/ 26 января 2011

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

Не используйте CSV для поиска элементов.Разложите это поле на 1NF-эквивалент.

Это не отношение «многие ко многим», как сказал другой ответ.Это один ко многим.

2 голосов
/ 26 января 2011

Вы могли бы FIND_IN_SET:

SELECT user_id, user_fname, user_lname FROM tbl_grp WHERE FIND_IN_SET(1, grp_id);

Но правильный способ сделать это, вместо того, чтобы хранить список идентификаторов, разделенных запятыми, в столбце, это иметьсвязь «многие ко многим» между вашими пользователями и группами:

user(user_id, user_fname, ...)
group(group_id, group_name, ...)
user_group(#user_id, #group_id) // you can have any number of (user_id, group_id) couples
1 голос
/ 26 января 2011

Вы ищете FIND_IN_SET :

SELECT user_id, user_fname, user_lname 
FROM tbl_grp 
WHERE FIND_IN_SET('1', grp_id);
0 голосов
/ 08 февраля 2011

Попробуйте,

ВЫБРАТЬ user_id, user_fname, user_lname FROM tbl_grp ГДЕ grp_id LIKE '1';

попробуй, я не мастер в ДБ, но лучше всего я могу это предложить.

...