2012-11-15 247 views
0

我有下面的代码,与我从表中选择第一个所有ID的用户,然后我选择并从属于这个用户的优惠券表中找到点的总和,然后我也选择所有从零售商表中属于此用户的点。然后我做这些和之间的区别。左外部连接问题与mysql

但是出了点问题,我得到了完全不同的观点。

$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 
+0

要真的,我不知道..我建议做这样的.. –

+1

你得到什么样的输出?以及你想得到什么输出? – sephoy08

+0

我需要为每个用户获得剩余的点数,每个用户的总额和总和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; 
+0

谢谢..它仍然不会给我确切的价值观,你认为可能有一些与查询,可能不会离开外部联接或其他东西... 我可以在单独的查询中做到这一点,但它更好,如果我只保留所有查询.. –

+0

@al_alb如果你能给出一个样本输出,你能期望什么输出,我可以提供更多的帮助。 – sephoy08

+0

我编辑了答案,这个想法是,一个用户的积分存储在零售商表中,这意味着,每次使用rbuys的东西时,都会插入一个新行,其中包含点数和用户标识,但是当用户花费积分,这些积分花费在点数和用户标识的优惠券表中,我需要的是找出总积分与用户花费的总积分的差值 –