Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PHPとSQLの連携

解決したいこと

請求書のプレビュー画面を制作しています。

請求No,(inv_no)が同じデータがあるとき、
[品名 及び 内容(content)],[数量(qty)],[単価(cost)],[金額(price)]を表に追加し、
小計(sub_total)を変動させたいのですが、解決方法が思い浮かびません。

小計については

sum(price) from テーブル名 GROUP BY inv_no;

を使うのかなと思っていますが、どこにどう書くのかがさっぱりです。

ご教授願います。

現在のコード

<?php
    if (isset($_GET['id'])) {
        try {

            // 接続処理
            $dsn = 'mysql:host=ipアドレス;dbname=データベース名';
            $user = '';
            $password = '';
            $dbh = new PDO($dsn, $user, $password);

            // SELECT文を発行
            $sql = "SELECT * FROM テーブル名 WHERE id = :id";
            $stmt = $dbh->prepare($sql);
            $stmt->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
            $stmt->execute();
            $member = $stmt->fetch(PDO::FETCH_OBJ); // 1件のレコードを取得

            // 接続切断
            $dbh = null;

        } catch (PDOException $e) {
            print $e->getMessage() . "<br/>";
            die();
        }

    }
?>


            <table class="detail">
                <thead>
                    <tr>
                        <th class="item" colspan="2">品名 及び 内容</th>
                        <th class="amount">数量</th>
                        <th class="unit_price">単価</th>
                        <th class="subtotal">金額</th>
                        <th class="remarks">備考</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td class="dataline" colspan="2"></td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                        
                    </tr>
                    <tr class="dataline">
                        <td class="text-left" colspan="2"> <?php echo htmlspecialchars($member->content); ?></td>
                        <td> <?php echo htmlspecialchars(number_format($member->qty)); ?> </td>
                        <td> <?php echo htmlspecialchars(number_format($member->cost)); ?> </td>
                        <td> <?php echo htmlspecialchars(number_format($member->price)); ?> </td>
                        <td> <?php echo htmlspecialchars($member->remarks); ?> </td>
                    </tr>
                    <tr class="dataline">
                        <td colspan="2"> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td colspan="2"> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td class="text-left" colspan="2">  以下空白 </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td colspan="2"> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td colspan="2"> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td colspan="2"> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td class="text-left" colspan="2"> 小計 </td>
                        <td> </td>
                        <td> </td>
                        <td> <?php echo htmlspecialchars(number_format($member->sub_total)); ?> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td class="text-left" colspan="2"> 消費税(10%) </td>
                        <td> </td>
                        <td> </td>
                        <td> <?php echo htmlspecialchars(number_format($member->tax)); ?> </td>
                        <td> </td>
                    </tr>
                    <tr class="dataline">
                        <td class="text-left" colspan="2"> 合計 </td>
                        <td> </td>
                        <td> </td>
                        <td> <?php echo htmlspecialchars(number_format($member->total)); ?> </td>
                        <td> </td>
                    </tr>
                   
                </tbody>
            </table>
        </div>
    </section>
</body>

</html>
1

1Answer

まずは「小計の計算」からやってみてはいかがでしょうか?
プログラムを積み重ねているうちに問題が大きくなって、よく分からなくなってしまうことはよくあることです。まずは小さな問題から解決していくことが大切です。

方法は大きく分けると、SQLで計算してその結果を取得する方法と、データを取得してPHPで計算する方法があります。
まずはどちらかの方法(できれば両方)を出来るようにするのが良いと思います。

また、テーブルの構造やデータの具体例、完成形のイメージなどの記載があると、より正確な回答が得られるかもしれません。

0Like

Comments

  1. @nakajima4635

    Questioner

    データベースの構造はこんな感じです。

    Screenshot from 2024-12-10 08-59-08.png

    理想としましては、請求No.(inv_no)が同じものがあれば、表に(品名 及び 内容[content],数量[qty],単価[cost],金額[price],備考[remarks])追加し、小計に追加した金額を足すというものが作りたいです。

    Screenshot from 2024-12-09 15-18-12.png

    小計の計算もあんまりしっくり来てない感じです。

  2. 詳細情報ありがとうございます。
    請求の明細が1行ずつ登録される構造なのだと推察します。

    請求No.(inv_no)が同じものがあれば、表に(品名 及び 内容[content],数量[qty],単価[cost],金額[price],備考[remarks])追加し、小計に追加した金額を足す

    それであれば、請求Noが同じデータを取得すれば、小計の計算に必要な情報も揃っている状態になると思います。

    大雑把に手順を考えると3つのステップがあると思います。

    1. 目的のデータを収集するSQLを作成する
    2. PHPからSQLを実行し、データを取得する
    3. 取得したデータを加工、表示する

    わからないのはどの部分でしょうか?
    具体的な事象を教えていいただいたほうが回答はしやすいです。特に技術をどのように理解し使おうとしているかは個人の頭の中にしか無いので説明していただく必要があります。

  3. @nakajima4635

    Questioner

    2番3番がわからないかったのですが、色々と試行錯誤することでなんとか解決することができました!
    ありがとうございます!

Your answer might help someone💌