0

mysql に 2 つのテーブルがあります。

people はユーザーの識別テーブルです..names/etc

trans はトランザクション テーブルであり、ユーザーが行ったこと (残高の加算/減算)

人々からすべての「ident」を返し、trans でその ident に一致する行を検索し、すべてが返された後、改ページをエコーし​​て、各人が自分のページを印刷するようにしたいと考えています。(ページが十分でないほど多くのトランザクションがあるべきではありません..) また、残りの残高をサブクエリします (トランザクションにはクレジットとデビットの両方があり、正または負の可能性があります)。

構造:

people.id #(not queried, unique/auto-increment)
people.name
people.location
people.ident #(assigned number that is same as trans.ident)

trans.id #(not queried, unique/auto-inc)
trans.date
trans.ident
trans.amount
trans.description

クエリ:

$query = "SELECT people.ident, people.name, people.location, trans.ident, trans.date, trans.amount, trans.description FROM people LEFT JOIN trans ON people.ident = trans.ident";
$balance = mysql_result(mysql_query("SELECT SUM(amount) FROM trans WHERE ident = $ident", $dblink), 0);
$result = mysql_query($query) or die(mysql_error());

エコー結果:

while($row = mysql_fetch_array($result)){
    echo $row['name']. " - ". $row['ident']. " - ". $row['amount']. " - " .row['description']; 
    echo('<div style="page-break-before: always;"></div>'); 
    }

これにより、各トランザクションが出力され、ident でソートされますが、それぞれの後に div が表示されます...名前と場所、および残りの残高も出力したいと思います (1 回は div で、次に trans は like の下)それで:

<div class="user">['name']  ['location'] $balance</div>  #These aren't rows, just a single return
<div class="trans">$row['amount']. " - ". $row['description'];</div>
<div style="page-break-before: always;"></div>

ご協力ありがとうございます。

4

1 に答える 1

1

people テーブル内の人の名前/場所が実際に同じ人/場所のものであると常に確信できるとは限らないため、これは少し難しいでしょう。データベースが完全に正規化されていません。

そうは言っても、クエリといくつかの PHP コードにいくつかの小さな変更を加えることで、必要なことを行うことができます :)

 $query = "SELECT people.ident, people.name, people.location,
           trans.ident, trans.date, trans.amount, trans.description
           FROM people LEFT JOIN trans ON people.ident = trans.ident
           ORDER BY peeople.name, people.location, trans.ident"; 

エコー結果:

$lastName = null;
$lastLocation = null;
while($row = mysql_fetch_array($result)){
    if (($lastName !== $row['name']) or ($lastLocation != $row['location'])) {
         echo $row['name']. " - ". $row['ident']. " - ". $row['amount']. " - " .row['description'];
         $lastName= $row['name'];
         $lastLocation = $row['location'];
    }

    /* ... output the transaction  line ... */
    echo('<div style="page-break-before: always;"></div>'); 
}
于 2013-05-28T14:30:18.227 に答える