Francis_molodec
@Francis_molodec
Я могучий

Как сделать поиск в бд по числовому диапазону с помощью BETWEEN и аналогичных способов на PHP?

Всем привет!
Вопрос в следующем:
У меня есть база данных и столбец с названием "xfields" в котором примерно такая структура содержимого:
------| --xfields---
ID1--| price|7510
------| -------------
ID2--| price|1500
------| -------------
ID3--| price|10000
------| -------------

Как сформулировать запрос с использованием foreach для отображения тех записей что есть в нужном диапазоне цен?
К примеру в поле "Цена от" я указываю 8000 а в поле "Цена до" я указываю 1000000. Чтобы запрос выдал только те id что попадают в указанный ценовой диапазон значения price| ?.
Нюанс в том что прямо там же в столбце через запятую может быть и другое значение, например:
price|1000, color|balck, bg|dark и так далее.

5f7fe81f27d09357780927.jpeg
Вот так выглядит столбец xfields

Сейчас у меня используется вот такой вариант поиска по диапазону:
$where[] = "ABS(SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$key}|', -1 ), '||', 1))>={$value[0]} AND ABS(SUBSTRING_INDEX(SUBSTRING_INDEX(xfields, '{$key}|', -1), '||', 1))<={$value[1]}";

$key это название значения(price);
Но этот способ крайне не точен и нестабилен. Есть ли альтернативы?
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Есть ли альтернативы?
Конечно есть.
Наилучшая альтернатива - нормализовать базу. Атрибуты, которые есть у большинства товаров, сделать колонками в основной таблице. Дополнительные атрибуты сделать отдельной таблицей (id_товара, id_атрибута, значение).
Ответ написан
Ваш ответ на вопрос

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

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