2

会計システムには、PHP と MySQL を使用しています。「GROUP」と「ACHEADS」の2つのテーブルがあります。

GROUP テーブルには、次のものがあります。

---------------------
| id (AI) |  group  |
---------------------
|    1    | Group 1 |
|    2    | Group 2 |
---------------------

ACHEADS テーブルには、次のものがあります。

-----------------------------------------
| id (AI) |  ac_head    | amount | j_id |
-----------------------------------------
|    1    | Something 1 |  2000  |   1  |
|    2    | Something 2 |  1000  |   1  |
|    3    | Something 3 |  5000  |   2  |
|    4    | Something 4 |  4000  |   2  |
|    5    | Something 5 |  8000  |   2  |
-----------------------------------------

2 つのテーブルを GROUP.id <<->> ACHEADS.j_id として結合しました

次に、次のようにデータをプレビューする必要があります。

----------------------------------------------
Particulars               | Details | Total  |
----------------------------------------------
Group 1                   |         |        |
 Something 1              |    2000 |        |
 Something 2              |    1000 |   3000 |
----------------------------------------------
Group 2                   |         |        |
 Something 3              |    5000 |        |
 Something 4              |    4000 |        |
 Something 5              |    8000 |  17000 |
----------------------------------------------
GRAND TOTAL               |         |  20000 |
------------------------------------==========

課題

  1. テーブルは動的になり、PHP ループ内で生成されます (私は WHILE ループを使用しています)
  2. 覚えておいてください: これはテーブルであり、td のエコーを逃すと、テーブルが壊れます。

問題

  • ループを使用している場合、詳細 td のデータが正確にエコーされます。ただし、j_id による詳細行の合計も各 td でエコーされます

ここでプレビュー:

----------------------------------------------
Particulars               | Details | Total  |
----------------------------------------------
Group 1                   |         |        |
 Something 1              |    2000 |   3000 |
 Something 2              |    1000 |   3000 |
----------------------------------------------
Group 2                   |         |        |
 Something 3              |    5000 |  17000 |
 Something 4              |    4000 |  17000 |
 Something 5              |    8000 |  17000 |
----------------------------------------------

私の考え

  • それがクエリの最後のデータであるかどうかを確認できれば、設定されている場合は、td で合計金額をエコーし​​ます。(ただし、課題 #2 を覚えておいてください)
  • foreach ループが必要ですか?

私は失敗しました

  • max(id) をチェックしてみました。SQL では問題なく動作しますが、ループ内の条件では使用できません。

(それでも理解できない場合は、第 2 段階でコードを投稿します。)

4

2 に答える 2

2

私は2つのループを行います:

  1. フェッチidGROUP
  2. amountACHEADS基づいてフェッチj_id

これは次のようになります (テストされていないコード):

echo '<table><tr><td>Particulars</td><td>Details</td><td>Total</td></tr>';

$total = 0;

$q1 = "SELECT id FROM `GROUP`";
$res1 = mysqli_query($q1);
while($row1 = mysqli_fetch_assoc($res1)) {
    echo 

    $group_total = 0;
    $j_id = $row1[id];

    $q2 = "SELECT ac_head, amount FROM ACHEADS WHERE j_id = $j_id";
    $res2 = mysqli_query($q2);
    while($row2 = mysqli_fetch_assoc($res1)) {

        echo '<tr><td>' . $row2[ac_head] . '</td>';
        echo '<td>' . $row2[amount] . '</td></tr>';

        $group_total = $group_total + $row2[amount];
        $total = $total + $row[amount];
    }

   echo '<tr><td colspan="3" align="right">' . $group_total . '</td></tr>';
}

echo '<tr><td>GRAND TOTAL</td>';
echo '<td colspan="2" align="right">' . $total . '</td></tr>';
echo "</table>";
于 2012-10-15T17:28:40.117 に答える
0

njk rockz!
It worked nicely. Thanks a lot, brother - it helped me a lot, I can't explain.
Here is my final code:

<tr style="background: #000; color:#fff;">
<th style="width:150px;">Particulars</th>
<th>Details</th>
<th>Amount</th>
</tr>

<tr>
<td>Opening Balance</td>
<td></td>
<td>500000</td> <!-- till not dynamic -->
</tr>

<?php
$total = 0;
$se = "SELECT * FROM group";
$res = mysql_query($se) or die (mysql_error());
while ($row = mysql_fetch_array($res))
{
?>

<tr>
<td colspan="3" style="font-weight:bold;"><?php echo $row['group']; ?></td>
</tr>

<tr>
<?php
$group_total = 0;
$se1 = "SELECT ac_head, amount FROM `acheads` WHERE `j_Id` = '".$row['id']."'";
$res1 = mysql_query($se1) or die (mysql_error());
while ($row1 = mysql_fetch_array($res1))
{
$group_total = $group_total + $row1['amount'];
?>
<td><?php echo $row1['ac_head']; ?></td>
<td><?php echo $row1['amount']; ?></td>
<td>&nbsp;</td>
</tr>

<?php
}
echo '<tr><td colspan="3" align="right">' . $group_total . '</td></tr>';
}
?>
</table>
</code>
于 2012-10-16T06:19:49.127 に答える