проверить разделенное запятыми поле с разделенным запятыми значением в mysql

0

Поле таблицы имеет значения 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, а имя существует в таблице

  • 0
    Не используйте значения, разделенные запятыми, или не используйте систему управления реляционными базами данных
Теги:

2 ответа

0
Лучший ответ

Вы можете использовать регулярное выражение, чтобы проверить, содержится ли значение в 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. "', '[[:>:]]')";
0

Поле cat_id должно содержать только один id по строке.

Нормально, что ваш запрос SQL не работает в настоящее время, потому что вы ищете cat_id 2 или 3 который SQL не находит.

Например, в вашей первой строке 1,2,3, для MySQL это строка "1,2,3", а не массив из трех идентификаторов.

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

И если у кошки может быть несколько имен, а у имени может быть несколько кошек, вы должны создать новую таблицу cats_names содержащую одно name_id и одну cat_id по строке.

  • 0
    Я хочу, чтобы имя не дублировалось. Таким образом, при добавлении я проверяю, совпадает ли это имя с cat_id, если переменная соответствует выходу, или мы вставляем или обновляем запрос. На основании cat_id присутствует или нет
  • 0
    Вы все еще сможете выполнять эти проверки в тех архитектурах, которые я вам рекомендую. На самом деле не рекомендуется хранить несколько идентификаторов в виде строки в поле базы данных MySQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню