左连接在codeigniter中

时间:2014-10-07 15:53:33

标签: php mysql sql 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

1 个答案:

答案 0 :(得分:1)

如果将所有连接更改为左连接,则可以始终在两个单独的查询中执行此操作,并在两个连接之间进行并集。一个人会得到所有的线路,这些线路实际上有一定数量,而另一条线路则会得到休息并将它们放在一起。

看起来有点像这样。可能会有一些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

希望这有帮助!祝你好运