php - 如何从 3 个表中获取数据库中的所有数据?
问题描述
我的问题是,我正在获取所有 3 个表中都存在的数据。但是我想显示任何一个表中都不存在的数据(如果不是,则为空白空间或在该项目上打印 0出现在表的任何人中)..我用谷歌搜索并发现它可以通过fullouter join来完成,但我不知道如何使用它..控制器代码:
public function St_statement(){
$startdate = $this->input->post('SDate');
$enddate = $this->input->post('EDate');
$date = str_replace('/', '-', $startdate);
$newDate = date("Y-m-d", strtotime($date));
$date2 = str_replace('/', '-', $enddate);
$newDate2 = date("Y-m-d", strtotime($date2));
$data['startdate'] = $startdate;
$data['enddate'] = $enddate;
if ($this->input->post('all'))
{
$this->db->where('billdate >=', $newDate);
$this->db->where('billdate <=', $newDate2);
$this->db->where('billdte >=', $newDate);
$this->db->where('billdte <=', $newDate2);
$this->db->select("Item");
$this->db->select("pgroup");
$this->db->select_sum("Stock");
$this->db->select_sum("quantity");
$this->db->select_sum("Qty");
$this->db->from('opstock');
$this->db->group_by("Item");
$this->db->order_by("pgroup",'asc');
$this->db->join('purchaseitem',' purchaseitem.Prdtname = opstock.Item','OUTER');
$this->db->join('salesitem','salesitem.Prdtname = purchaseitem.Prdtname','OUTER');
$this->db->join('itemmaster','itemmaster.itemname = purchaseitem.Prdtname','OUTER');
$this->db->join('pgroup','pgroup.pgroupid = itemmaster.catcode','OUTER');
$query = $this->db->get();
$data['query'] = $query;
$this->load->view('Inventory/St_Stmt', $data);
//$this->load->view('Inventory/St_Stmt1', $data);
}
if($this->input->post('selected'))
{
if($name = $this->input->post('businessType'))
{
$this->db->where('billdate >=', $newDate);
$this->db->where('billdate <=', $newDate2);
$this->db->where('billdte >=', $newDate);
$this->db->where('billdte <=', $newDate2);
$this->db->where('pgroup',$name);
$this->db->select("Item");
$this->db->select("pgroup");
$this->db->select_sum("Stock");
$this->db->select_sum("quantity");
$this->db->select_sum("Qty");
$this->db->from('opstock');
$this->db->group_by("Item");
$this->db->join('purchaseitem',' purchaseitem.Prdtname = opstock.Item','OUTER');
$this->db->join('salesitem','salesitem.Prdtname = purchaseitem.Prdtname','OUTER');
$this->db->join('itemmaster','itemmaster.itemname = purchaseitem.Prdtname','OUTER');
$this->db->join('pgroup','pgroup.pgroupid = itemmaster.catcode','OUTER');
$query = $this->db->get();
$data['query'] = $query;
$this->load->view('Inventory/St_Stmt', $data);
}
}
}
解决方案
$query = "SELECT Item
, pgroup
, SUM( Stock
) AS Stock
, SUM( quantity
) AS quantity
, SUM( Qty
) AS Qty
FROM opstock
LEFT JOIN purchaseitem
ON purchaseitem
. Prdtname
= opstock
. Item
LEFT JOIN salesitem
ON salesitem
. Prdtname
= purchaseitem
. Prdtname
LEFT JOIN itemmaster
ON itemmaster
. itemname
= purchaseitem
. Prdtname
LEFT JOIN pgroup
ON pgroup
. pgroupid
= itemmaster
. catcode
WHERE billdate
>= ' ".$newDate."' AND billdate
<= '".$newDate2."' AND billdte
>= '".$newDate."' AND billdte
<= '".$newDate2."' GROUP BY Item
ORDER BY pgroup
ASC UNION SELECT Item
, pgroup
, SUM ( Stock
) 作为Stock
,总和( quantity
)作为quantity
,总和(Qty
)Qty
从右opstock
连接purchaseitem
开始purchaseitem
。Prdtname
= opstock
。Item
左salesitem
加入salesitem
。Prdtname
= purchaseitem
。Prdtname
左itemmaster
加入itemmaster
。itemname
= purchaseitem
。Prdtname
左pgroup
加入pgroup
。pgroupid
= itemmaster
。catcode
WHERE billdate
>= '".$newDate."' AND billdate
<= '".$newDate2."' AND billdte
>= '".$newDate."' AND billdte
<= '".$newDate2."' GROUP BY Item
ORDER BY pgroup
ASC SELECT Item
, pgroup
, SUM( Stock
) AS Stock
, SUM( ) quantity
AS quantity
, SUM(
) Qty
ASQty
从左连接开始。= 。opstock
purchaseitem
purchaseitem
Prdtname
opstock
Item
salesitem
开salesitem
。Prdtname
= purchaseitem
。Prdtname
左itemmaster
加入itemmaster
。itemname
= purchaseitem
。Prdtname
左pgroup
加入pgroup
。pgroupid
= itemmaster
。catcode
WHERE billdate
>= '".$newDate."' AND billdate
<= '".$newDate2."' AND billdte
>= '".$newDate."' AND billdte
<= '".$newDate2."' GROUP BY Item
ORDER BY pgroup
ASC UNION SELECT Item
, pgroup
, SUM( Stock
) AS Stock
, SUM( quantity
) AS quantity
, SUM( Qty
) ASQty
从opstock
LEFT JOIN purchaseitem
ON开始purchaseitem
。Prdtname
= opstock
。Item
左salesitem
加入salesitem
。Prdtname
= purchaseitem
。正确Prdtname
加入。itemmaster
itemmaster
itemname
purchaseitem
. Prdtname
左pgroup
加入pgroup
。pgroupid
= itemmaster
。catcode
WHERE billdate
>= '".$newDate."' AND billdate
<= '".$newDate2."' AND billdte
>= '".$newDate."' AND billdte
<= '".$newDate2."' GROUP BY Item
ORDER BY pgroup
ASC" ;
$query = $this->db->query($query);
推荐阅读
- javascript - 使用 PURE JS 动态获取附加到 DOM 的元素
- python - del C[0] 直到 len(C) == 1 和 while 循环
- typescript - TypeScript:Promise.all 中的类型推断不正确
- javascript - 勾选一个单元格中的复选框,具体取决于同一行级别的另一个单元格中的内容
- java - SessionScope 的 SpringBoot 问题
- java - 使用 openCsv StatefulBeanToCSV 限制 CSV 文件大小
- argv - 在 J 中使用命令行参数
- php - Codeigniter PHP 版本无漏洞
- c++ - 显示名称函数模板名称
- c - 写入文件描述符并立即从中读取