我正在加入4个表来获得第一个表中存在的金额的总和。到目前为止,我已经尝试了许多替代方案以获得总和,但是如果我不使用group_by,它或者变为0(如果我是group_by),或者重复。这是我的代码:
$this->db->select('COALESCE(SUM(cust_ reservation_request.dollar_amount), "0") as total');
$this->db->join('cust_ reservation_request', 'cust_ reservation_request.id = cust_reservations.rid', 'LEFT');
$this->db->join('attendees', 'cust_rid= cust_ reservation_request.id', 'LEFT');
$this->db->join('cust_reservation_cancelled', 'cust_reservation_cancelled.rid = cust_ reservation_request.id', 'LEFT');
$this->db->where('cust_ reservation_request.tid IN (5, 6, 7, 8)->where('attendees.status', 1)->where('cust_reservation_cancelled.rid IS NULL');
$this->db->group_by('cust_reservation_request.id');
$total = $this->db->get('cust_reservations')->row()->total;
我得到0作为$ total变量的值,而它应该是288。
但是,当我删除$this->db->group_by('cust_reservation_request.id');
语句时,我在attendees.attendees.cust_rid
上得到了重复,实际上是{$ 1}},$ total变为498,因为可以有多个与会者同时摆脱。我想删除这个副本,保留所有dollar_amount字段的实际SUM。
我的表是:
cust_ reservation_request
id // index, foreign key in rest of other tables
tid
uid
dollar_amount
cust_reservations
id
rid // related to id in cust_ reservation_request table
reservation_date
pay_token
cust_ reservation_cancelled
id
rid // related to cust_ reservation_request.id
cancel_date
attendees
id
cust_rid // its the same rid, related to cust_reservation_request.id
status
你认为有更安全的方法可以做到这一点,在以正确的方式进行SUM时删除重复项吗?
提前感谢您的帮助。
答案 0 :(得分:0)
我原来的回答是:"我认为您的数据有问题,查询返回NULL,由COALESCE"转换为0,但问题不在于此。 "状态"存在问题。 "参与者"表,它主要是通过主题启动器解决的,所以我不配得到点
扎法尔,很高兴你设法解决了这个问题。来自以色列的问候:)
答案 1 :(得分:0)
可能是...... (翻译它将如何在大型机上)
它会是这样的:
$this->db->select('COALESCE(SUM(cust_ reservation_request.dollar_amount), "0") as total');
$this->db->where exists (select 1 from cust_reservations where cust_reservations.rid = cust_ reservation_request.id);
$this->db->and exists (select 1 from attendees where cust.rid = cust_reservation_request.id);
$this->db->and exists (select 1 from cust_ reservation_cancelled where cust_reservation_cancelled.rid = cust_reservation_request.id);
$this->db->and ('cust_ reservation_request.tid IN (5, 6, 7, 8)->where('attendees.status', 1)->where('cust_reservation_cancelled.rid IS NULL');
$this->db->group_by('cust_reservation_request.id');
$total = $this->db->get('cust_reservations')->row()->total;
你必须检查语法和所有的()和',因为我不知道除了普通的SQL之外的语言,你可能需要改变'并且'存在'在'where exists'和/或改变一个以后的地方an和。
此查询的目的(在纯SQL中)是您希望仅对一个表(cust_reservation_request)中的dollar_amount求和,以确保在具有相同row_id的其他表中也存在一行。
希望这有帮助。