左加入codeigniter

巴辛·谢里夫(Basim Sherif)

我有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中重写它:

ps将数量相加,可以使用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

希望这可以帮助 !祝你好运

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章