【发布时间】:2016-10-08 08:35:37
【问题描述】:
我的 sql 中有一个表结构,如下所示:
品牌 -> 品牌用户
BrandUser 表包含 userId 和 brandId 列。我需要获取所有已注册和未注册的品牌。
例如,假设我有 userId = 2,它在 brandUser 表中重复两次,我发送 userId = 2...我需要从 Brands 表中获取这两条记录以及其余品牌对于哪个用户在 BRANDUSER 表中没有价值。我写了以下查询:
$col = "
u.id,
u.username,
u.firstName,
bu.active,
bu.userId,
b.name";
$sql = " SELECT $col
FROM brands b
LEFT JOIN branduser bu on bu.brandId = b.id
LEFT JOIN users u on bu.userId = u.id
WHERE bu.userId = $userId";
$brandListUserRegistered = $this->getBrandModel()->getBrandsForUser($sql);
这是执行查询的 getBrandsForUser 操作:
public function getBrandsForUser($sql){
$resultSet = $this->dbAdapter->query($sql,Adapter::QUERY_MODE_EXECUTE);
return $resultSet->toArray();
}
我现在主要关注的是查询本身......通过上面的查询,我只获得实际上在branduser表中有相应记录的用户的品牌记录,这不是我想要的...... :/
【问题讨论】:
-
左连接时,将右侧表的条件放在ON子句中,以获得真正的左连接行为! (在 WHERE 中,您会得到常规的内部连接结果。)
-
你能以答案的形式回复,以便我明白你的意思吗?
标签: php mysql sql sql-server