我正在开发一个功能,允许用户输入他们的脚尺寸并返回合适的鞋码。我很难决定实现此功能的最佳方式。
我在下面的查询是我想出的。它返回长度和宽度不同的两个最接近的结果。返回的差异可能是正数或负数,但是,负数当然是一个问题,因为这表明返回的大小对于用户的尺寸来说太小了。
我正在寻求帮助的部分是如何排除小于用户输入的尺寸。
询问
SELECT
size_name,
length,
ABS(length - ' . $input->length . ') AS length_difference,
width,
ABS(width - ' . $input->width . ') AS width_difference
FROM
SIZES
LIMIT
2
ORDER BY
length_difference
Run Code Online (Sandbox Code Playgroud)
结果
{
"size_name": "8",
"length": 10.3,
"length_difference": 0.15,
"width": 3.8,
"width_difference": 0.4
},
{
"size_name": "9",
"length": 10.6,
"length_difference": 0.15,
"width": 3.9,
"width_difference": 0.3
}
Run Code Online (Sandbox Code Playgroud)
更新
我一直在调整并意识到这并不像我做的那么难。在下面的屏幕截图中,我有一些接近的东西。我正在使用 PHP,所以我想我可以过滤掉负值,然后我显然有大小 9。这看起来像一个有效的解决方案吗?
小智 1
因此,您似乎缺少 where 子句,该子句会过滤掉不需要的结果。在此示例中,我假设 2 是一个合适的阈值,并使用 Between 子句来限制输出。大于限制也可以工作,但这实际上取决于数据集。
SELECT
size_name,
length,
ABS(length - ' . $input->length . ') AS length_difference,
width,
ABS(width - ' . $input->width . ') AS width_difference
FROM
SIZES
WHERE
length BETWEEN $input->length AND ($input->length + 2)
AND width BETWEEN $input->width AND ($input->width + 2)
ORDER BY
length_difference
LIMIT 2
Run Code Online (Sandbox Code Playgroud)
这是使用大于的示例。
SELECT
size_name,
length,
ABS(length - ' . $input->length . ') AS length_difference,
width,
ABS(width - ' . $input->width . ') AS width_difference
FROM
SIZES
WHERE
length > $input->length
AND width > $input->width
ORDER BY
length_difference
LIMIT 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
399 次 |
最近记录: |