0

私はdb構造に従っています。

id      email     lat      long      point      balance    date
1       33        1.00     2.00      0          empty      date 
2       34        8.00     3.00      -1         empty      date
3       33        7.00     4.00      2          empty      date
4       33        6.00     5.00      0          empty      date
5       33        6.33     5.43      -1         empty      date

そのため、メールIDが33のすべてのレコードを表示したいのですが、たとえば、すべての行で残高を表示する必要があります。

In first row it's balance is 0
second row it's balance is   2
third row it's balance is    2
four row it's balance is     1 

したがって、私のphpコードは次のようになりますが、正しいバランスが取れません:

echo "<table width='100%' cellpadding='5' cellspacing='0' border='1'>";
echo "<tr>";
echo "<td class='tdhead' valign='top' width='100'><b>Date</b></td>";    
echo "<td class='tdhead' valign='top' width='100'><b>Lattitude</b></td>";
echo "<td class='tdhead' valign='top' width='50'><b>Longitude</b>
</td>";                     
echo "<td class='tdhead' valign='top' width='50'><b>Point</b>
</td>";                     
echo "<td class='tdhead' valign='top' width='50'><b>Balance</b>
</td>";                     
echo "</tr>";

while($res =  mysql_fetch_array($park_history))
{
    $lat = $res['lat'];
    $long = $res['long'];
    $point =  $res['point'];
    $date = $res['date'];           
    $balance = 0;

$sum = mysql_query("SELECT SUM(point) AS points FROM balance WHERE email = 
'".$_SESSION['SESS_ID']."'");
    $sum_res = mysql_fetch_array($sum);
    $sum = $sum_res['points'];

    echo "<tr>";                
            echo "<td class='tdhead2' valign='top'>$date</td>";
            echo "<td class='tdhead2' valign='top'>$lat</td>";
            echo "<td class='tdhead2' valign='top'>$long</td>";
            echo "<td class='tdhead2' valign='top'>$point</td>";
            echo "<td class='tdhead2'    
valign='top'>$sum</td>";                        
    echo "</tr>";
}

mysql sum 関数を使用して実行できると思います。解決策や提案を教えてください。ありがとうございました。

4

2 に答える 2

1

MySQLsum関数は、あなたが望んでいることをしませんが、そうしなければならないわけではありません。既にフェッチした結果を使用して、タスクを完了するより簡単な方法があります。

操作している行の が既にあるので、$pointそれをカウンターに追加して、そこから先に進みます。そのままでは、すべての行で余分な db 呼び出しを行っています。

使用する:

$sum = 0;

while ( $res = mysql_fetch_array($park_history) ) {

    /* yada yada */
    $point =  $res['point'];
    $sum += $point;

    echo /* your table here */

}

行を完全に削除できます。

$sum = mysql_query( ... );
$sum_res = mysql_fetch_array($sum);
$sum = $sum_res['points'];

$total説明したように実行中のポイントの集計を保持し、ループごとにデータベースにクエリを実行しません。

于 2013-10-26T05:37:59.460 に答える
0

これがphpです:

$park_history = mysql_query("
SELECT * 
FROM balance 
WHERE email ='".$_SESSION['SESS_ID']."'");
$i = 0;
$balance = 0; // the first sum of balance will 0 + first point
while($res =  mysql_fetch_array($park_history))
{
    $i++;
    $lat    = $res['lat'];
    $long   = $res['long'];
    $point  = $res['point'];
    $date   = $res['date'];           
    $balance= $balance + $point; // balance will be updated in every loops
    echo "<tr>";                
            echo "<td class='tdhead2' valign='top'>$date</td>";
            echo "<td class='tdhead2' valign='top'>$lat</td>";
            echo "<td class='tdhead2' valign='top'>$long</td>";
            echo "<td class='tdhead2' valign='top'>$point</td>";
            echo "<td class='tdhead2' valign='top'>$balance</td>";                        
    echo "</tr>";
}

このコードを削除します:

$sum = mysql_query("SELECT SUM(point) AS points FROM balance WHERE email = 
'".$_SESSION['SESS_ID']."'");
    $sum_res = mysql_fetch_array($sum);
    $sum = $sum_res['points'];

を再定義し$park_historyます:

$park_history = mysql_query("
SELECT * 
FROM balance 
WHERE email ='".$_SESSION['SESS_ID']."'");

それをチェックしてください!エラーを見つけたら教えてください(コメント)..助けになるかもしれません:D

于 2013-10-26T05:41:04.980 に答える