Поле таблицы имеет значения 1,2,3 (разделенное запятой значение), а переменная имеет 2,3. Теперь мне нужно проверить значение переменной погоды в поле таблицы, используя запрос вместе с другим полем имени
таблица пользователя
id name cat_id
-----------------
1 test 1,2,3
2 test1 3,4
3 test2 4
переменная $ value = 2, 3
Запрос: select * from user where name='test' and cat_id IN ('".$value."')
но для запроса выше я получаю нулевые данные
Как проверить, существует ли данный идентификатор в поле cat_id, а имя существует в таблице
Вы можете использовать регулярное выражение, чтобы проверить, содержится ли значение в cat_id:
SELECT * FROM user WHERE name='test' AND cat_id REGEXP CONCAT('[[:<:]]', value, '[[:>:]]')
это будет пытаться сопоставить value
на любой границе слова в cat_id
, поэтому для cat_id='1,2,3'
'2,3'
будут совпадать значения (например) '1,2'
, '2'
, '2,3'
.
Поместить его в строчную форму (например, для PHP):
$sql = "SELECT * FROM user WHERE name='test' AND cat_id REGEXP CONCAT('[[:<:]]','" . $value. "', '[[:>:]]')";
Поле cat_id
должно содержать только один id
по строке.
Нормально, что ваш запрос SQL не работает в настоящее время, потому что вы ищете cat_id 2
или 3
который SQL не находит.
Например, в вашей первой строке 1,2,3
, для MySQL это строка "1,2,3", а не массив из трех идентификаторов.
Если имя может использоваться несколькими кошками, возможно, они должны быть те, у которых есть name_id
.
И если у кошки может быть несколько имен, а у имени может быть несколько кошек, вы должны создать новую таблицу cats_names
содержащую одно name_id
и одну cat_id
по строке.