Вот мой код:
<table class = "table table-bordered">
<thead>
<tr>
<th>Sr#</th>
<th>Description</th>
<th>Sale</th>
<th>Expense</th>
</tr>
</thead>
<tbody>
<?php
$fetch_record = "SELECT * FROM `transactions` JOIN `users` ON `transactions`.`user_id`=`users`.`user_id` WHERE `users`.`user_id`='$user_id'";
$fetch_record_r = mysqli_query($con, $fetch_record);
$record_found = mysqli_num_rows($fetch_record_r);
if ($record_found > 0) {
$sr = 1;
$net_total = 0;
while($records = mysqli_fetch_assoc($fetch_record_r)){
if ($records['type'] == 1) {
$net_total = $net_total + $records['sale'];
}else if ($records['type'] == 2){
$net_total = $net_total - $records['expense'];
}
?>
<tr>
<td><?php echo $sr++; ?></td>
<td style = "text-transform: capitalize;"><?php echo $records['description']; ?></td>
<td><?php echo $records['sale'];?></td>
<td><?php echo $records['expense'];?></td>
</tr>
<?php
if (($sr % 2)) { // skip even members
?>
<tr>
<td colspan = "2"></td>
<td colspan = "2" class = "label-info text-center" style = "color: #fff;">Total Balance: <?php echo $net_total; ?></td>
</tr>
<?php
}
?>
<?php
}
?>
<tr>
<td colspan = "4" class = "label-info text-center" style = "color: #fff;">Total: <?php echo $net_total; ?></td>
</tr>
<?php
}else{
echo "<h1 class='text-center text-danger'>No Record Found</h1>";
}
?>
</tbody>
</table>
Данные поступают из базы данных, но не из расчетов. Я хочу, чтобы при изменении типа транзакции с продажи на расход все транзакции, связанные с продажей, были рассчитаны, и наоборот. Точно так же, как баланс. Я знаю, что написал неправильную логику. но я не могу понять логику. Вы можете лучше понять мой вопрос, посмотрев на изображение.Пример калькулятора продажных расходов
Нет, это то, что сейчас работает. Я хочу, чтобы каждое чистое вычисление отображалось, когда $ records ['type'] каждый раз изменяется с 1 на 2. Пример: есть пять транзакций с $ records ['type'] = 1, теперь, как только $ records ['type' ] = 2, тогда должны быть рассчитаны все транзакции $ records ['type'] = 1 и показан результат






Вы можете использовать временную переменную, чтобы указать, изменилось ли значение type от одной итерации к другой.
Если бы это был мой код, я бы попытался назвать столбцы в моем предложении SELECT для ясности.
Я также считаю разумным добавить в запрос предложение ORDER BY, но я не знаю, по какому имени столбца вы хотите сортировать.
Непроверенный код:
<?php
$sql = "SELECT * FROM transactions a INNER JOIN `users` b ON a.user_id = b.user_id WHERE a.user_id = " . (int)$user_id; // ORDER BY date (or something?)
if (!$result = mysqli_query($con, $sql)) {
echo '<tr><td colspan = "4"><h1 class = "text-center text-danger">Query Syntax Error</h1></td></tr>';
} elseif (!mysqli_num_rows($fetch_record_r)) {
echo '<tr><td colspan = "4"><h1 class = "text-center text-danger">No Record Found</h1></td></tr>';
} else {
$sr = 0;
$net_total = 0;
$type = null;
while ($row = mysqli_fetch_assoc($result)) {
if ($type !== null && $type != $row['type']) {
// type has change from previous and is not null
?>
<tr>
<td colspan = "2"></td>
<td colspan = "2" class = "label-info text-center" style = "color: #fff;">Total Balance: <?php echo $net_total; ?></td>
</tr>
<?php
}
if ($row['type'] == 1) {
$net_total += $row['sale'];
} elseif ($row['type'] == 2) {
$net_total -= $row['expense'];
}
?>
<tr>
<td><?php echo ++$sr; ?></td>
<td style = "text-transform: capitalize;"><?php echo $row['description']; ?></td>
<td><?php echo $row['sale'];?></td>
<td><?php echo $row['expense'];?></td>
</tr>
<?php
$type = $row['type']; // update the temporary variable
}
?>
<tr>
<td colspan = "4" class = "label-info text-center" style = "color: #fff;">Total: <?php echo $net_total; ?></td>
</tr>
<?php
}
Это не проверено, поэтому, если я допустил опечатки, дайте мне знать, и я исправлю это.
Кажется, вы пытаетесь получить общую сумму значений, когда количество записей в доходе больше одного, верно?
Если да, то, пожалуйста, рассмотрите следующий подход, чтобы получить общую сумму.
SELECT SUM(**column_name**)
FROM **table_name**
WHERE **condition**;
Вы можете присвоить результаты переменной и заполнить их, используя операторы if.
Вы можете использовать оператор if, чтобы проверить, что количество возвращенных строк больше одной, выполнить вышеуказанный оператор SQL и заполнить расчет / результаты.
Я хочу делать именно то, что происходит в балансе
Вы говорите, что хотите отображать промежуточную сумму после каждых 2 строк данных?