Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql的左外部连接问题_Php_Mysql - Fatal编程技术网

Php mysql的左外部连接问题

Php mysql的左外部连接问题,php,mysql,Php,Mysql,我有下面的代码,使用该代码,我首先从表用户中选择所有id,然后从优惠券表中选择并查找属于该用户的总积分,然后从零售商表中选择属于该用户的所有积分。然后我计算这两个和之间的差 但是出了点问题,我得到了完全不同的观点 $query4 = 'SELECT u.*, sum(c.points) as total_sum1, sum(r.basket_value) as total_sum FROM users u left outer join coupo

我有下面的代码,使用该代码,我首先从表用户中选择所有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>";
}

我想你的问题是:

    $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;

说实话,我不知道。。有人建议我这样做..你得到了什么输出?你想要得到什么输出?我需要得到每个用户的剩余点,每个用户的总和和总和的差值,我得到数字,但是所有用户的数字几乎都一样谢谢。。它仍然不会给我精确的值,你认为查询可能有什么问题,可能不是左外连接或其他什么。。。我可以在单独的查询中执行此操作,但如果我将所有查询都保存在一个查询中会更好。@al_alb如果您能提供一个示例输出,我可以提供更多帮助,您希望得到什么输出。我编辑了答案,其想法是,用户的积分存储在零售商表中,这意味着,每次用户购买某样东西时,都会插入一个新行,使用点数和用户id,但当用户花费点数时,这些点数将与点数和用户id一起进入优惠券表,我需要的是计算用户获得的总点数与花费的总点数之间的差值。您能帮我吗?@al_alb等等,我会帮您检查
 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;