0

我有一个基本上模拟储物柜的应用程序。在每个储物柜内,我有 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');
4

1 回答 1

0

我猜是这样的:

$this->db->where('r.LOCKER_fk', $this->session->userdata('LOCKER_ID'));
$this->db->where('box.ACESSIBLE', '1');
于 2013-05-09T19:18:14.653 回答