PHP - показывать расчет только при изменении оператора IF

Вот мой код:

        <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>

Данные поступают из базы данных, но не из расчетов. Я хочу, чтобы при изменении типа транзакции с продажи на расход все транзакции, связанные с продажей, были рассчитаны, и наоборот. Точно так же, как баланс. Я знаю, что написал неправильную логику. но я не могу понять логику. Вы можете лучше понять мой вопрос, посмотрев на изображение.Пример калькулятора продажных расходов

Вы говорите, что хотите отображать промежуточную сумму после каждых 2 строк данных?

mickmackusa 28.10.2018 11:36

Нет, это то, что сейчас работает. Я хочу, чтобы каждое чистое вычисление отображалось, когда $ records ['type'] каждый раз изменяется с 1 на 2. Пример: есть пять транзакций с $ records ['type'] = 1, теперь, как только $ records ['type' ] = 2, тогда должны быть рассчитаны все транзакции $ records ['type'] = 1 и показан результат

Faizan Zafar 28.10.2018 11:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
59
2

Ответы 2

Вы можете использовать временную переменную, чтобы указать, изменилось ли значение 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
}

Это не проверено, поэтому, если я допустил опечатки, дайте мне знать, и я исправлю это.

mickmackusa 28.10.2018 12:46

Кажется, вы пытаетесь получить общую сумму значений, когда количество записей в доходе больше одного, верно?

Если да, то, пожалуйста, рассмотрите следующий подход, чтобы получить общую сумму.

SELECT SUM(**column_name**)
FROM **table_name**
WHERE **condition**; 

Вы можете присвоить результаты переменной и заполнить их, используя операторы if.

Вы можете использовать оператор if, чтобы проверить, что количество возвращенных строк больше одной, выполнить вышеуказанный оператор SQL и заполнить расчет / результаты.

Я хочу делать именно то, что происходит в балансе

Faizan Zafar 28.10.2018 14:15

Другие вопросы по теме