我有一个看起来像这样的数据
"discountPrices": [
{
"startQuantity": 3,
"price": 65.0
},
{
"startQuantity": 8,
"price": 62.0
},
{
"startQuantity": 20,
"price": 60.0
},
]
如您所知,这是产品的折扣价。我想在这里实现两件事。
1。)我想创建一个名为Discountprice的表,该表将具有列,即price |最小数量最大数量。使用上面的数据,第一行将是65.00 |。 3 | 7,第二行为62.00 | 8 | 19和第三行将是60 | 20 | 1000。 我首先遇到的问题是,我不知道如何获取最大数量,因为数据不包含最大数量。它仅声明startQuantity。如何获得每一行的最大量并进行记录?
2。)如何在页面上输出。例如,使用数据,我可以做类似3> = 7 = $ 65.00,8> = 19 = $ 62.00,20> = 1000 = $ 60.00
我认为最困难的部分是如何知道最大数量,因为未指定最大数量。请问我怎样才能达到这个结果。
答案 0 :(得分:1)
您不需要知道最大数量。只需按原样存储您的数据,并查询startQuantity小于或等于orderQuantity的第一行:
SELECT price FROM discounts
WHERE startQuantity <= :orderQuantity
ORDER BY startQuantity DESC
LIMIT 1
例如,请参见here。
如果找不到结果,那么就没有折扣,您的价格只是基本的未打折价格。 (或者,您也可以插入一行,其中包含基准价格,0代表startQuantity。)
请注意,我假设您要销售一种以上的产品,因此您可能需要在该表(以及相关的WHERE子句)中使用一个字段来标识哪种产品。
答案 1 :(得分:0)
您可以使用以下代码片段获取最大数量
$json = '[
{
"startQuantity":3,
"price":65.0
},
{
"startQuantity":8,
"price":62.0
},
{
"startQuantity":20,
"price":60.0
}
]';
$jsonToArray = json_decode($json, true);
$startQuantity = array_column($jsonToArray, 'startQuantity');
array_walk($jsonToArray, function($v, $k) use (&$jsonToArray, $startQuantity) {
$index = array_search($v['startQuantity'], $startQuantity);
if(array_key_exists($index+1, $startQuantity))
$jsonToArray[$k]['endQuantity'] = $startQuantity[$index+1]-1;
});
print_r($jsonToArray);
结果
Array
(
[0] => Array
(
[startQuantity] => 3
[price] => 65
[endQuantity] => 7
)
[1] => Array
(
[startQuantity] => 8
[price] => 62
[endQuantity] => 19
)
[2] => Array
(
[startQuantity] => 20
[price] => 60
)
)