Задать вопрос

Поиск array по MySQL

У меня на БД теги хранятся в виде: ,1,2,4, — идентификаторы тегов. Почему запятая впереди и в конце? Это чтоб не путался числа, например: 11 и 1, код поиска: WHERE `tags` LIKE '%,".strtoupper($tags).",%'. Как мне искать пост, который имеет хоть один из этих чисел?

Это код, который я выведу их:
$tags = explode(',',addslashes($_POST['i']));
$t = mysql_fetch_array($ts = mysql_query("SELECT * FROM `tags` WHERE `id` IN (".implode(',',array_map('intval',$tags)).")"));
но этот не имеет значения, к данному вопросу.
  • Вопрос задан
  • 3633 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
street
@street
Backend developer
Я решил у себя подобную задачу иначе, используя регулярные выражения:
- множественный выбор из таблицы:
SELECT t.id FROM table t WHERE t.tags REGEXP '[[:<:]](1|2|3)[[:>:]]'

- одиночный выбор:
SELECT t.id FROM table t WHERE t.tags REGEXP '[[:<:]](1)[[:>:]]'

Таким образом вы исключаете варианты 11, 12 и т.д.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Kerman
@Kerman
Это Вы, уважаемый, столкнулись с плохой архитектурой базы. И, к сожалению, тут нужно кардинально менять структуру БД.
Нужна отдельная таблица связи тегов и постов. Тогда всё будет просто и можно будет воспользоваться при выборе конструкцией MySQL WHERE tags IN(теги через запятую).
Ответ написан
affka
@affka
http://affka.ru
Тут только менять структуру БД нужно. Всё остальное - извращение.
Ответ написан
Комментировать
Sild
@Sild
WHERE `tags` LIKE '%,".strtoupper($tag1).",%' OR `tags` LIKE '%,".strtoupper($tag2).",%'
и так далее по всем tag в tags?
?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы