Я разрабатываю PHP-скрипт с MySQL. Я сохранил данные жанра как «1, 2, 3» (ID)
Тогда у меня проблема с поиском данных.
Таблица моих данных:
мета-таблица
------------------- meta_id,meta_genres -------------------- |1 |1,2,3 | |2 |10,3,4 | |3 |12,3,5 | -------------------
мой запрос
SELECT * FROM metas WHERE meta_genres LIKE '%1%'
затем возвращаем идентификаторы: 1,2,3
Я хочу, чтобы он возвращал только 1.
Как я могу это исправить?
С наилучшими пожеланиями.
Вы также можете использовать REGEXP для поиска только разделенных 1
в наборе ввода
SELECT * FROM metas WHERE meta_genres REGEXP '[[:<:]]1[[:>:]]'
Используйте функцию FIND_IN_SET (str, strlist) :
SELECT * FROM metas WHERE FIND_IN_SET(1, meta_genres)
EDIT: если пробелы перед запятыми (например, 1 , 2 , 3
) в meta_genres, то выше запрос может возвращать пустой набор. Чтобы обойти:
SELECT * FROM metas WHERE FIND_IN_SET(1, REPLACE(meta_genres, ' ', ''));
Вы никогда не будете извлекать только 1, это потому, что числа после 1 являются частью строки 2,3. Таким образом, запрос не рассматривает эти числа как отдельные числа, а просто как целую строку …..