笨。如何获取数据库列的总和

时间:2017-03-07 07:58:46

标签: php mysql codeigniter

我有两张桌子。

pre_order
enter image description here

receive_pre_order
enter image description here

我的问题是如何从 pre_order表获取所有信息,并获取 receive_pre_order表收到的所有数量的 SUM pre_order id
为清楚起见,假设我们在 recieve_pre_order 中有以下数据。

+--------------+------------+-------------------+
| pre_order_id | product_id | quantity_recieved |
+--------------+------------+-------------------+
|            1 |          1 |                10 | 
|            1 |          1 |                20 | 
|            1 |          1 |                10 |
+--------------+------------+-------------------+

它应该针对quantity_recieved = 40返回pre_order_id 1

现在我尝试过:

$this->db->select_sum('quantity_recieved');
$this->db->from('recieve_pre_order');
return $this->db->get();

它正在工作,但它从一张表中获取数据 但我想从两个表中获取数据。

4 个答案:

答案 0 :(得分:1)

加入两个表格表(rpo.pre_order_id = po.id)。将结果分组为po.id,因此具有相同po.id的所有行将分组为一行。 sum(rpo.quantity_recieved)将总结这些群体的数量。

select po.id, sum(rpo.quantity_recieved)
from receive_pre_order rpo 
join pre_order po on rpo.pre_order_id = po.id  
group by po.id; 

答案 1 :(得分:1)

试试这个

  $this->db->select("sum(recieve_pre_order.quantity_recieved),pre_order.id");
  $this->db->from('recieve_pre_order');
  $this->db->join("pre_order",'recieve_pre_order.pre_order_id = pre_order.id','left outer');
  $this->db->where('recieve_pre_order.pre_order_id',your parameter);

答案 2 :(得分:0)

const apply = f => typeof f === "function" ? f() : null;
const Switch = (input, ...entries) => apply(new Map(entries).get(input));

const types = {
  INCREMENT: "INCREMENT",
  DECREMENT: "DECREMENT",
  SQUARE: "SQUARE"
};


const myNumberReducer = function(state = { myNumber: 0 }, action = {}) {
  return Object.assign({}, state, Switch(action.type,
    [ types.INCREMENT, () => ({ myNumber: state.myNumber + 1 }) ],
    [ types.DECREMENT, () => ({ myNumber: state.myNumber - 1 }) ],
    [ types.SQUARE,    () => ({ myNumber: state.myNumber * state.myNumber }) ]
  ));
}


let lastState = myNumberReducer();
console.log(lastState); // myNumber: 0

lastState = myNumberReducer(lastState, { type: types.INCREMENT });
console.log(lastState); // myNumber: 1

lastState = myNumberReducer(lastState, { type: types.INCREMENT });
lastState = myNumberReducer(lastState, { type: types.SQUARE });
console.log(lastState); // myNumber: 4

答案 3 :(得分:0)

尝试子查询而不是连接表。

  $this->db->select("po.*,SELECT(SUM(quantity_recieved) from receive_pre_order where pre_order_id = po.id) as total_recieved_quantity",FALSE);
  $this->db->from('pre_order as po');
  return $this->db->get();