2015-12-07 2 views
0

Я хочу сделать форму заказа, где пользователь может выбрать размер одежды. У меня есть все доступные размеры, хранящиеся в базе данных, как code, size и category.MySQL/PHP - возврат ближайшего численного соответствия

size отформатирован как 66/68/76 (талия/бедра/длина ног). Пользователь может ввести эти три значения. Если размер пользователя доступен - проблем нет. Но если я не хочу, чтобы сайт предлагал или менял его до ближайшего доступного размера. Например, если пользователь вводил 65/66/74, и точное значение не существует (или недоступно прямо сейчас), оно будет изменено на 66/65/74.

+0

Сколько размеров на каждый вы хотите идти вверх/вниз? Является ли размер хранимым как 3 отдельные вещи или как один? –

+0

Вы должны указать, что вы подразумеваете под «ближайшим». –

+0

@SamSwift 웃 Существует не предел, только самое близкое совпадение, будь то вверх или вниз, поскольку мы, например, талии, колеблются от 66 до 85. И они хранятся как один –

ответ

1

Вам нужно определить, что вы подразумеваете под «ближайшим». По пути вы также должны сохранить три значения в трех разных столбцах. Хранение нескольких значений в одном столбце - плохая идея.

Иногда один застрял в определенном формате данных из-за плохого решения проекта.

Возможно, разумной мерой является евклидово расстояние - сумма квадратов каждого компонента. Вы можете вычислить это в MySQL:

select t.* 
from (select t.*, 
      substring_index(size, '/', 1) as waist, 
      substring_index(substring_index(size, '/', 2), '/', -1) as hips, 
      substring_index(size, '/', -1) as legs 
     from t 
    ) t 
order by pow(waist - $waist, 2) + pow(hips - $hips, 2) + pow(legs - $legs, 2) 
limit 1; 
+0

Извините, не могли бы вы объяснить это в большем контексте, я полный любитель.Так, например, если у меня есть переменная $ size, которая является POST текстового поля, как бы я тогда подготовить такую ​​переменную для запуска в этом запросе? –

0

Один из способов whould быть хранить 3 значения как целое число 666876 (66/68/76).

Затем вы можете сделать запрос о Minimun стоимости вычитания из productSize - userSize, что больше 0.

Этого подход требует всегда одежд выше размера.

+0

Это может сработать. Я попробую. Благодаря! –

Смежные вопросы