Intereting Posts

Возвращение отсутствующих результатов от многих до многих таблиц

У меня есть структура таблицы, как показано ниже:

Brands => BrandUser <= Users 

Мне нужно получить бренды, которые имеют соответствующую запись в таблице BrandUser, и те, которые не имеют соответствующей записи в таблице BrandUser …

Я пробовал следующий запрос:

 public function getUserBrands($userId) { $select = new Select(); $select->from(array('bu' => $this->table)); $select->join(array('b' => 'brands'), 'bu.brandId = b.id', array('id','name')); $select->join(array('u' => 'users'), 'u.id = bu.userId', array('id','username'),Select::JOIN_LEFT); $where = new Where(); $where->equalTo("bu.userId",$userId); $select->where($where); return $this->branduserTable->selectWith($select)->toArray(); } 

Но я получаю только тех пользователей, которые имеют соответствующую запись в таблице BrandUser … Мне нужно получить остальные бренды, которые не имеют соответствующего значения в BrandUser … Как я могу это сделать?

Solutions Collecting From Web of "Возвращение отсутствующих результатов от многих до многих таблиц"

Имейте в виду, я не знаком с Zend-Framework, поэтому вам, возможно, придется немного адаптировать это. Но вам нужно использовать Brands в качестве первичной / первой таблицы, чтобы сначала получить все записи этой таблицы, а затем сопоставить ее с остальными таблицами.

 public function getUserBrands($userId) { $select = new Select(); $select->from(array('b' => 'brands')); $select->join(array('bu' => $this->table), 'bu.brandId = b.id', array('id','name'),Select::JOIN_LEFT); $select->join(array('u' => 'users'), 'u.id = bu.userId', array('id','username'),Select::JOIN_LEFT); $where = new Where(); $where->equalTo("bu.userId",$userId); $select->where($where); return $this->branduserTable->selectWith($select)->toArray(); }