2015-12-07 30 views
0

我想订购一个订单,用户可以选择一个服装尺寸。我将所有可用的大小存储在数据库中,如code,sizecategoryMySQL/PHP - 返回最近的数字匹配

size格式化为66/68/76(腰围/髋部/腿部长度)。用户可以输入这三个值。如果用户的大小可用 - 没有问题。但如果不是,我希望网站提供或将其更改为最近的可用尺寸。例如,如果用户输入65/66/74且确切值不存在(或现在不可用),则它将被更改为66/65/74。

+0

每个你想要上/下多少尺寸?尺寸是以三个独立的东西或一个存储的? –

+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

一种方法是将3个值存储为666876(66/68/76)。

然后,你可以做的productSize - userSize的减法的最低限度的值的查询,即大于0

这种方法将总是服装更高的大小。

+0

这可能只是工作..我会试一试。谢谢! –