mysql — PHP инкрементальный калькулятор цен на основе количества

Я пытаюсь написать сценарий, который рассчитывает цену на основе количества.

База данных :

пид | продиктовать | блок | цена

1 | кокс | 100 | 2

2 | кокс | 100 | 1,8

3 | кокс | 300 | 1,5

4 | кокс | | 1,1

1 | пепси | 100 | 2,2

2 | Пепси | 50 | 2

3 | пепси | | +0,8

Pid — это идентификатор продукта, Product — название продукта / код продукта. Единица — Добавочная единица, или в дополнение к существующей единице на число, цена — цена за единицу для дополнительной единицы.

Реальные проблемы:

  • если единица равна » или Null, то есть она определяет максимальную совокупную единицу, а затем к ней применяется цена в этом нулевом столбце.
  • Не все продукты имеют одинаковый уровень цен. некоторые могут закончить со значением 1 (фиксированная ставка, в этом случае единица будет нулевой или ». некоторые могут пойти как можно выше.
  • Там нет накопительного столбца, и я не могу добавить это. Его нет, и добавить его сейчас невозможно, потому что продуктов может быть миллионы (предположим, чтобы сделать код гибким для неограниченного количества продуктов)
  • Все, что вы получите, — это единица единиц измерения и код продукта. например. 100 единиц кокса или 200 единиц пепси.
  • Число в столбце единицы: Inclusive, то есть меньше чем равно.

Я был большим поклонником For loop и break (плохое программирование), но теперь я думаю, что мне нужно либо if condition, либо while while, потому что и то, и другое не вызывает большой уверенности.

заранее спасибо

ЗаметкаЕсли вам трудно понять проблему, просто примите калькулятор подоходного налога, то же самое или аналогичное — до x суммы, базового налога, затем для NEXT y суммы, y налоговой ставки, для следующей суммы z, z налоговой ставки больше, чем z , z + налог

0

Решение

Ну, вы, конечно же, сначала хотите просмотреть все продукты, а затем вычислить итоговое значение, исходя из переданного количества. Как-то так?

// Using PostgreSQL as an example here
$entries = pg_fetch_all(pg_query('SELECT * FROM database ORDER BY prodict, pid ASC'));

// Have the quantities ready;
$quantities = array(
'coke' => 1024,
'pepsi' => 512,
);

// Prepare an array to hold the total values.
$totals = array();

// Loop through the entries in the array in a non-conventional way
while($entry = current($entries)) {
// Get the name of the product from the array
$product = $entry['prodict'];
// And the quantity
$quantity = $quantities[$product];
// Prepare a price for this product starting at zero
$price = 0;
// Now use a do-while to figure out the price
do {
// At this point '$entry' contains information about the pricing for the first 'x' quanitity
$quantityAtThisPrice = $entry['unit'];
// Check the price
$priceForThisUnit = $entry['price'];
// Check we have any quantity remaining of this product
if($quantity > 0) {
// Check if the quantity at this price is null or if that quantity at this price is more than what we have left
if($quantityAtThisPrice === null || $quantityAtThisPrice > $quantity) {
// This means the rest of the quantity is at this price
$price += ($quantity * $priceForThisUnit);
// No more quantity left to price
$quantity = 0;
}
// Otherwise we'll add for this unit, and move on to the next
else {
// Add to the price
$price += ($quantityAtThisPrice * $priceForThisUnit);
// Subtract the quantity we just priced
$quantity -= $quantityAtThisPrice;
}
}
// Now fetch the next entry
$entry = next($entries);
} while ($entry['prodict'] === $product);

// Add the calculated price to the totals array
$totals[$product] = $price;
}

var_dump($totals);

Немного увлекся, но я думаю, что это должно сработать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]