从多个表

时间:2016-06-07 14:13:04

标签: php mysql sql zend-framework zend-framework2

我有一个如下表格结构:

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中没有相应值的其他品牌......我该怎么办?

1 个答案:

答案 0 :(得分:0)

请注意,我不熟悉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();
}