Задать вопрос
grigor7
@grigor7
Humanum est errare.

Как реализовать фильтр (php + mysql)?

Добрый день, господа. Прощу помощи.

Есть таблица. Поля id и category. Category - json данные. Я извлекаю данные из таблицы. Заменяю json на обычный массив.

Есть еще обычный массив от клиента.

Допустим, массив клиента: ['smth', 'other']. Массив из json первый: ['it', 'other'], массив из json второй: ['other', 'smth']. Нужно оставить только массивы, в которых хотя бы один элемент совпадает с массивом клиента. Я сделал проверку через in_array(). Если true, то продолжаем, иначе - удаляем массив. Но в таком случае удалится первый массив из json, потому что foreach будет проверять наличие smth во втором массиве, там нет такого значения, но есть элемент other!

Вопрос: как реализовать систему, которая не сразу бы удаляла данные, а сначала убедившись, что совпадений вообще нет.

Пытался сделать через доп. массив, куда складывал имена массивов на удаление, убирал оттуда, если совпадение все-таки находилось. Не получилось. Мне кажется, что я все слишком усложнил. Прошу помощи, заранее благодарен!

UPD: решено, ответ ниже.
  • Вопрос задан
  • 4395 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
grigor7
@grigor7 Автор вопроса
Humanum est errare.
Вопрос решен, использовал функцию array_intersect.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
somenumboola
@somenumboola
Team Lead in B-online Solutions
1. Не увидел схему таблицы категорий
2. Не понял каким боком тут mysql. Подозреваю что хотите работать с json отсевом на уровне mysql но не уверен. Если хотите: LIKE, RLIKE и собственный генератор регулярных выражений. Хотя и смысла особо не вижу. Если объем данных не большой, то нагрузка что с поиском применяющим RLIKE, что просто на уровне php равноценна. А может даже на MySQL будет больше
3. На счет того что "усложнил" склонен согласится.
4. Не понял зачем хранить категории в json, подозреваю что нужна система подкатегорий, но тогда Adjacency List, Materialized Path и Nested Set в помощь.
Ответ написан
Ваш ответ на вопрос

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

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