php - Mysql 在使用带有 SUM 方法和 if 条件的多个联接时出错?

标签 php mysql

第一个查询 -

SELECT 
  SUM( IF( rm.rm_msg_type = 'In', rm.messages, 0 ) ) AS `Added`
 ,SUM( IF( rm.rm_msg_type = 'Out', rm.messages, 0 ) ) AS `Deduct`
 ,(SUM( IF( rm.rm_msg_type = 'In', rm.messages, 0 ) ) - SUM( IF( rm.rm_msg_type = 'Out', rm.messages, 0 ) )) AS `Actual Credit Balance Client Hold` 
FROM `resellers` AS `r`
LEFT JOIN `reseller_msg` AS `rm` ON `rm`.`reseller_id` = `r`.`resellerId`
INNER JOIN `panel_login` AS`p` ON `p`.`s_no` = `r`.`resellerId`
GROUP BY `rm`.`reseller_id`
ORDER BY `r`.`resellerId` DESC 

在运行第一个查询时,它会得到这样的正确结果 -

username    Added   Deduct  Actual Credit Balance Client Hold   
pankaj123   1000    0       1000
soravgarg   1200    210     990

第二个查询--

SELECT
  `r`.`reseller_uname` AS `username`
 ,SUM( IF( rm.rm_msg_type = 'In', rm.messages, 0 ) ) AS `Added`
 ,SUM( IF( rm.rm_msg_type = 'Out', rm.messages, 0 ) ) AS `Deduct`
 ,(SUM( IF( rm.rm_msg_type = 'In', rm.messages, 0 ) ) - SUM( IF( rm.rm_msg_type = 'Out', rm.messages, 0 ) )) AS `Actual Credit Balance Client Hold`
FROM `resellers` AS `r`
LEFT JOIN `reseller_msg` AS `rm` ON `rm`.`reseller_id` = `r`.`resellerId`
INNER JOIN `panel_login` AS`p` ON `p`.`s_no` = `r`.`resellerId`
LEFT JOIN `user_msgs` AS `um` ON `um`.`reseller_id` = `r`.`resellerId`
GROUP BY `rm`.`reseller_id`
ORDER BY `r`.`resellerId` DESC 

但是使用第二个查询会得到这样的错误结果 -

username    Added   Deduct  Actual Credit Balance Client Hold   
pankaj123   1000    0       1000
soravgarg   7200    1260    5940

在第二个查询中,我仅添加了另一个联接,即

LEFT JOIN `user_msgs` AS `um` ON `um`.`reseller_id` = `r`.`resellerId`

通过在第二个查询中添加此行,它会得到不正确的结果;我们也可以在第二行中看到这一点。

您还可以在此处检查数据库结构 --

http://appsms.in/sql/sms_panel

最佳答案

INNER JOIN更改为LEFT JOIN

SELECT r.reseller_uname AS username, 
SUM( IF( rm.rm_msg_type = 'In', rm.messages, 0 ) ) AS Added,
SUM( IF( rm.rm_msg_type = 'Out', rm.messages, 0 ) ) AS Deduct,
(SUM( IF( rm.rm_msg_type = 'In', rm.messages, 0 ) ) - SUM( IF( rm.rm_msg_type = 'Out', rm.messages, 0 ) )) AS `Actual Credit Balance Client Hold`
FROM resellers AS r 
LEFT JOIN reseller_msg AS rm ON rm.reseller_id = r.resellerId 
LEFT JOIN panel_login AS p ON p.s_no = r.resellerId      --    <-- This one
LEFT JOIN user_msgs AS um ON um.reseller_id = r.resellerId 
GROUP BY rm.reseller_id 
ORDER BY r.resellerId DESC; 

关于php - Mysql 在使用带有 SUM 方法和 if 条件的多个联接时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34696737/

相关文章:

Php Ajax - 一个页面中的多个调用

javascript - 当有嵌套函数时,组织 javascript、php 代码以便于阅读

javascript - MySQL/jQuery : fetch table results, 传入一个 jQuery 数组,一次只显示 6 个并随机旋转结果

Mysql 最高从 1 行

mysql - 三表连接的结果不正确

mysql - 如何使用连接插入

php - 从多个表中检索不存在或匹配行集的多列(mysql php)

javascript - 如何使用ajax将文件发送到另一个php文件后返回文件信息

php - 如何在 PHP MySQL 的 while 循环内运行嵌套语句?

MySQL 将字段名称转换为行中的值