0

以下のコードを使用して、最初にテーブル ユーザーからすべての ID を選択し、クーポン テーブルからこのユーザーに属するポイントの合計を選択して見つけます。次に、小売業者からこのユーザーに属するすべてのポイントも選択します。テーブル。次に、この合計の差を計算します。

しかし、何かがうまくいかず、まったく異なるポイントが得られます。

$query4 = 'SELECT u.*, sum(c.points) as total_sum1, sum(r.basket_value) as total_sum 
           FROM users u 
           left outer join coupon c on u.user_id=c.user_id
           left outer join retailer r on u.user_id=r.user_id 
           group by user_id';
$result4 = mysql_query($query4) or die(mysql_error());

$total1=0;
$total=0;
$total2=0;
while($row = mysql_fetch_array($result4)) {
    $total1 += $row['total_sum1'];
    $total += $row['total_sum'];
    echo "<table>";
    echo "<tr>";
    echo "<td>";
    echo  $total2=$total-$total1;
    echo "</td>";
    echo "<td>";

    echo "</td>";
    echo "</tr>";
    echo "</table>";
}

出力のサンプル:

total points remaining    |   user_id
0                             9839467227
0                             9853125067
0                             9937770769
0                             9974837329
222060                        A101
0                             A102
0                             A103
0                             A104
4

1 に答える 1

0

あなたの問題は次のとおりだと思います:

    $total1 += $row['total_sum1'];
    $total += $row['total_sum'];

$total1$totalすべてのユーザーのすべてのレコードを追加しています。私はそれがなければならないと思います:

    $total1 = $row['total_sum1'];
    $total = $row['total_sum'];

これを試して:

 SELECT u.*, SUM(c.ts) AS total_sum1, SUM(r.bv) AS total_sum 
FROM users u 
LEFT JOIN 
 (SELECT user_id ,SUM(points) AS ts FROM coupon GROUP BY user_id) c 
 ON u.user_id=c.user_id 
LEFT JOIN 
 (SELECT user_id ,SUM(basket_value) AS bv FROM retailer GROUP BY user_id) r 
ON u.user_id=r.user_id 
GROUP BY u.user_id;
于 2012-11-15T08:29:10.700 に答える