我有一个基本上模拟储物柜的应用程序。在每个储物柜内,我有 N 个架子。在每个架子里,我有 N 个盒子、N 个文件夹和 N 本书。其中一些对象是不可访问的(它们有一个称为 ACESSIBLE 的布尔属性)。
我想显示每个储物柜和按类型(书籍、文件夹和盒子)排序的对象总和。就像是:
RACK_ID:1
RACK_NUMBER:001
LOCKER_NUMBER:54
SUM_BOXES:10
SUM_FOLDERS:20
SUM_BOOKS:10
我的查询:
$this->db->select('r.ID AS RACK_ID, r.NUMBER AS RACK_NUMBER, l.NUMBER AS LOCKER_NUMBER) ->select('IFNULL(COUNT(DISTINCT `box`.`ID`), 0) AS `SUM_BOXES`', FALSE) ->select('IFNULL(COUNT(DISTINCT `book`.`ID`), 0) AS `SUM_BOOKS`', FALSE) ->select('IFNULL(COUNT(DISTINCT `folder`.`ID`), 0) AS `SUM_FOLDERS`', FALSE); $this->db->from('rack r'); $this->db->join('locker l', 'l.ID = r.LOCKER_fk', 'inner'); $this->db->join('box box', 'box.RACK_fk = r.ID', 'left'); $this->db->join('book book', 'book.RACK_fk = r.ID', 'left'); $this->db->join('folder folder', 'folder.RACK_fk = r.ID', 'left'); $this->db->where('r.LOCKER_fk', $this->session->userdata('LOCKER_ID')); $this->db->group_by("r.ID");
这很好用,但是计数会返回每个机架中的所有盒子、书籍和文件夹,可访问或不可访问。我想在每个计数上输入一个 WHERE 条件,该条件只返回可访问的对象(类似于 WHERE box.ACESSIBLE = 1)。我怎样才能做到这一点?
谢谢。
编辑:好的,所以我找到了解决方案:更改为:
$this->db->join('box box', 'box.RACK_fk = r.ID AND box.ACESSIBLE= "1"', 'left');
$this->db->join('book book', 'book.RACK_fk = r.ID AND book.ACESSIBLE= "1"', 'left');
$this->db->join('folder folder', 'folder.RACK_fk = r.ID AND folder.ACESSIBLE= "1"', 'left');