0

基本的にロッカーをシミュレートするアプリケーションがあります。各ロッカーの中に N 個のラックがあります。各ラックの中には、N 個のボックス、N 個のフォルダー、および N 個の本があります。このオブジェクトの一部はアクセスできません (ACCESSIBLE と呼ばれるブール属性があります)。

各ロッカーと、タイプ (本、フォルダー、ボックス) ごとに並べられたオブジェクトの合計を表示したいと考えています。何かのようなもの:

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");

これは問題なく動作しますが、count は各ラックのすべてのボックス、本、フォルダーをACCESSIBLE OR NOTで返します。アクセス可能なオブジェクトのみを返す各カウントで 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