MySQL / PHP - 返回最接近的数字匹配

时间:2015-12-07 12:42:18

标签: php mysql

我想制作一个订单表格,用户可以选择服装尺码。我将所有可用尺寸存储在数据库中,如codesizecategory

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

然后,您可以查询productSize - userSize的减法的最小值,大于0。

这种方法总是使服装尺寸更大。