1

最初にデータベースに存在するすべてのユーザーを抽出するために使用するこのコードがあります。次に、それぞれにクエリを実行して、計算されたポイント数を確認します。私の問題は、クエリに割り当てられたポイントを持つユーザーが正しい情報を抽出することですが、ユーザーがポイントを持っていない場合、それらのすべてのユーザーは 0 ポイントに表示されず、別のユーザーのポイントがそれらに与えられます..何が問題なのか私のコードで?

//here i get all user id's
$query = 'SELECT * FROM users';
    $result = mysql_query($query) or die(mysql_error());
    $id_user = array();
    $phone = array();
    $name = array();
    while($row = mysql_fetch_array($result)){
        $id_user[]=$row['user_id'];
        $phone[]=$row['phone'];
        $name[]=$row['first_name'];
    }
//here i get all points collected for each user
    foreach ($id_user as $user_id) {
    $queryuser ='SELECT SUM(basket_value) as total_sum FROM retailer WHERE user_id="'.$user_id.'"';
    $resultuser = mysql_query($queryuser) or die(mysql_error());
    echo "<table>";
    while($row = mysql_fetch_array($resultuser)){

            $total += $row['total_sum'];
            echo "<tr>";
            echo "<td>";
            echo $total;
            echo "</td>";
            echo "<td>";
            echo $user_id;
            echo "</td>";
            echo "</tr>";
        }
    }
    echo "<table>";
4

3 に答える 3

1

あなたの問題:all those users won't appear 0 points, but another user's points are given to them

$total=0;事前に初期化する必要があるためwhile($row = mysql_fetch_array($resultuser)){

于 2012-11-14T08:42:21.007 に答える
0

foreachループで$totalを初期化するのを忘れました。

foreach ($id_user as $user_id) {
  $total = 0;
  ...
于 2012-11-14T08:44:38.500 に答える
0

ループ$totalの前に 0 にリセットする必要があります。while

両方のテーブルを結合すると、計算を簡素化することもできます。

select u.user_id, u.phone, u.first_name, sum(r.basket_value) as total_sum
from users u
left join retailer r on r.user_id = u.user_id
group by u.user_id, u.phone, u.first_name;

その後、結果セットを 1 回だけループして、追加のクエリをすべて保存できます。

于 2012-11-14T08:43:01.453 に答える