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

У меня есть таблица MySQL DB tbl_users, в которой есть два uid, name, usergroupid.usergroupid содержит целые числа через запятую (IE: 1,2,3).

Я хочу, чтобы все пользователи, которые содержат идентификаторы групп пользователей, сказали 1 или 2 или 3 или 1,2 или 2,3 или 3,1 или 1,2,3.Я получаю значение для сравнения в базе данных из переменной, которая сама содержит значения, разделенные запятыми, скажем, 1.2.3 или 1,2 или 2,3 или 3,1 или 1,2,3.Теперь, что будет запрос на выборку для получения результата.

Я использую запрос на выборку ниже, чтобы найти результат, но он неверный.

SELECT user_id, user_fname, user_lname 
  FROM tbl_users 
 WHERE user_group_id IN (".$usergroupid.")

здесь $usergroupid - это переменная, которая содержит CSV

Ответы [ 3 ]

1 голос
/ 24 июня 2011

LIKE потенциально может подобрать неверную группу пользователей, если вы сделаете LIKE "% 1%", тогда, если у вас группа 10, 11, 12 и т. Д., Она будет соответствовать.

Если предположить , что все ваши строки имеют форму x, y, z, ... тогда менее наивный LIKE будет более устойчивым.

SELECT user_id, user_fname, user_lname
FROM tbl_users
WHERE (',' + user_group_id + ',') LIKE '%,".$usergroupid.",%'
1 голос
/ 24 июня 2011

Лучше всего в этой ситуации использовать сопоставление с образцом, чтобы найти необходимые значения.

SELECT user_id, user_fname, user_lname  FROM tbl_users WHERE user_group_id LIKE (%".$usergroupid."%)

Это если вам нужен точный шаблон в csv, иначе вы должны разбить свой csv в соответствии с , и запустить его в цикле, чтобы получить желаемый результат.

Но я думаю, что для такой вещи лучше всего иметь другую таблицу usergroup с полями user и group, которая будет отображаться от пользователя к группе.Так что в этом случае вы можете просто сделать

SELECT userID FROM usergroup WHERE groupid IN $usergroupid
0 голосов
/ 13 июля 2011

Вы пробовали использовать FIND_IN_SET?Я использовал его иногда, и в этих случаях он работает очень хорошо.

"FIND_IN_SET(user_group_id,".$user_group_id".)"

Дополнительная информация: здесь

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