0

ねえ、私はphp/mysqlでのプログラミングに比較的慣れていません。私はデータベースを Access から mysql に移行しています。ここでは、VBA について比較的詳しい知識があります。

私が持っている質問は、私が個々の現金元帳の記録を取っているということです. トランザクションは、次のような構造のデータベースに保存されます。

tblclientpcトランザクション

transactionid
clientid -fk
date
description
depositamount
withdrawlamount

私がする必要があるのは、特定の時間範囲の台帳を生成し、それを提示して時系列で情報を表示し、その時点までの残高を示す別のフィールドを用意することです。別名

日付| クライアント ID | 説明 | 預金額 | 引き出し金額 | ランニングバランス

access/vba では、dsum() 関数を使用して特定の行の値を取得しましたが、これを達成する方法が php であることがわかりません。

4

1 に答える 1

0

レポート データを取得するには、MySql で次のようにします。

SELECT `date`,
       `clientid`,
       `description`,
       `depositamount`,
       `withdrawlamount`,
       (@rt:=@rt + `depositamount` - `withdrawlamount`) AS runningbalance
FROM `transactions`, (SELECT @rt:=0) rt
WHERE `date` < CURDATE() AND
      `clientid` = 1
ORDER BY `date`

CURDATE()レポートの日付に変更します。

ここで、テーブルに次のデータがあるとします。

transactionid clientid date       description depositamount withdrawlamount
---------------------------------------------------------------------------
1             1        2013-01-01 NULL               100.00            0.00
2             1        2013-01-05 NULL                50.00           20.00
3             1        2013-01-07 NULL                 0.00           30.00
4             1        2013-01-15 NULL               200.00            0.00
5             1        2013-01-20 NULL                 0.00           50.00

それがあなたの出力になります:

date       clientid description depositamount withdrawlamount runningtotal
--------------------------------------------------------------------------
2013-01-01 1        NULL               100.00            0.00       100.00
2013-01-05 1        NULL                50.00           20.00       130.00
2013-01-07 1        NULL                 0.00           30.00       100.00
2013-01-15 1        NULL               200.00            0.00       300.00
2013-01-20 1        NULL                 0.00           50.00       250.00

その後、次のように php スクリプトでクエリを使用できます。

date_default_timezone_set('America/New_York');
$client_id = 1;
$report_date = date('Y-m-d');

$db = new PDO('mysql:host=localhost;dbname=yourdbname;charset=UTF-8', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$query = $db->prepare("
    SELECT `date`,
           `clientid`,
           `description`,
           `depositamount`,
           `withdrawlamount`,
           (@rt:=@rt + `depositamount` - `withdrawlamount`) AS runningbalance
    FROM `transactions`, (SELECT @rt:=0) rt
    WHERE `date`     < :report_date AND
          `clientid` = :client_id
    ORDER BY `date`");

$query->execute(array(':report_date' => $report_date, ':client_id' => $client_id));
$rows = $query->fetchAll(PDO::FETCH_ASSOC);

//your code to render the report goes here

簡潔にするために、すべてのエラー処理とチェックはスキップされます。

于 2013-01-27T07:50:22.443 に答える