左侧加入代码点火器


Left join in codeigniter

我有3个表,

 itemmaster
|--------|----------|
|  id    |   name   |
|--------|----------|
|   1    |   Pizza  | 
|--------|----------|
|   2    |   Burger | 
|--------|----------|
|   3    |   Pepsi  | 
---------------------
     order
    |--------|----------|
    |orderid |   date   |
    |--------|----------|
    |   1    |   1-1-11 | 
    |--------|----------|
    |   2    |   2-1-11 | 
    |--------|----------|
    |   3    |   3-1-11 | 
    ---------------------

          orderdetails
        |--------|-------------|---------|---------|
        |  id    |   orderid   |itemid   |quantity |
        |--------|-------------|---------|---------|
        |   1    |   1         | 1       | 10      |
        |--------|-------------|---------|---------|
        |   2    |   1         | 2       | 20      |
        |--------|-------------|---------|---------|
        |   3    |   2         | 1       | 10      |
        -------------------------------------------

我想加入这3张表,以获取在特定日期下的订单的项目数量。我试过的是

$this->db->from('itemmaster');
$this->db->join('orderdetails', 'orderdetails.itemid= itemmaster.id','left');
$this->db->join('order', 'order.orderid= orderdetails.orderid');
$this->db->where('order.date',"1-1-11");            
$query = $this->db->get();

我得到的结果是,

Pizza------ 10
Burger------10

我想要的是

Pizza-------10
Burger------20
Pepsi-------0

如果将所有联接更改为左联接,则始终可以在两个单独的查询中进行,并在这两个查询之间进行并集。一个会得到所有实际有数量的线,另一个会把剩下的线放在一起。

它看起来会有点像这个。可能会有一些synthax错误,但无论如何都必须在php中重写:

p.s.要将数量相加,可以使用sum()

Select itemmaster.name, orderdetails.quantity from itemmaster 
left join orderdetails on orderdetails.itemid = itemmaster.id 
left join order on order.orderid = orderdetails.orderid 
where order.date = '1-1-11'
group by itemmaster.name
Union 
Select itemmaster.name, '0' as quantity From itemmaster 
except (Select itemmaster.name, orderdetails.quantity from itemmaster 
left join orderdetails on orderdetails.itemid = itemmaster.id 
left join order on order.orderid = orderdetails.orderid 
where order.date = '1-1-11'
group by itemmaster.name)
group by itemmaster.name

希望这能有所帮助!祝好运