@hamerium

Как можно провести такую фильтрацию?

Здравствуйте.
Изучаю программинг и PHP, и столкнулся с такой задачей.
Есть таблица в SQL-базе, предположим, товары. У каждой строки есть id и поле options, где в JSON-формате записаны характеристики в таком формате:
[{"55":"134","57":"12","36":"8"}]
Первое число - ID параметра, второе - ID его значения (для параметра и значений, соответственно, есть специальные свои таблицы в базе).
Есть форма фильтрации товаров, выглядит примерно так:
<form method = "post">
<select name = "filter_55">
<option value = "134">Значение один</option>
<option value = "135">Значение два</option>
<option value = "136">Значение три</option>
</select>
<select name = "filter_59">
<option value = "145">Значение один</option>
<option value = "45">Значение два</option>
<option value = "12">Значение три</option>
</select>
</form>

На выходе, после небольшой обработки $_POST, я получаю массив вида
Array
(
    [55] => 134
    [59] => 12
)

где левое число - id параметра, а правое - id значения.

И на этом моменте я сталкиваюсь с непониманием, как мне сравнить данный массив с тем JSON-массивом (как перекодировать в массив, я знаю), и в результате выдать список ID товаров. При этом условие при фильтрации - AND, выдавать только если совпадают все значения.
Я, конечно же, не прошу писать рабочий код, просто хочу, чтобы подтолкнули к верному решению.
Заранее всем спасибо!
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 2
@gracer
Пересмотрите архитектуру базы. Храните опции в отдельной таблице. Полезно будет про нормальные формы почитать.
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега MySQL
MySQL умеет искать по JSON
Если данных немного (десятки тысяч - это мало. Сотни тысяч и миллионы уже не мало), то проблем с производительностью не возниккнет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы