ZEND 左连接不同查询
ZEND Left Join Distinct Query
我有这个SQL
查询:
select *
from locations
left join (select location_id, name as occupied
from meetings
where start < $value1 and end > $value2 limit 1) m
on locations.id = m.location_id;
locations
table 的每个位置都有很多会议,每个会议都属于一个特定的位置。每个会议都有开始时间和结束时间。通过该查询,我想从数据库中获取所有位置并向每个人添加一个 booked
列,如果该位置在给定间隔内被占用,则 occupied
列的值将是重叠的会议名称。
SQL
查询 returns 正是我想要的(例如 Location 1, Location 2, Location 3, etc
)。
我想在我的 ZEND 模型中使用相同的查询。现在我有
$model = new Model_Location();
$m = new Model_Meeting();
$model->getSelect()
->joinLeft(
"meetings as m",
"m.location_id = $model.id AND m.start < $value1 AND m.end > $value2",
array('occupied' => "m.name"));
这 returns 我所期望的,但是对于每次重叠的会议,我都会得到一个条目,它是 lcoation,导致 Location 1, Location 1, Location 2, Location 2, Location 2, Location 3, etc
。我怎样才能只获得不同的值?我知道 limit
不存在于我的 zend 查询中,但我不知道在哪里使用它。我在 joinLeft
之后和之前尝试过,但在那些情况下,它将我的模型限制为只有 1 个条目,而不仅仅是不同的条目。我也试过 ->distinct()
但也没用。
GROUP BY 是您要查找的内容,因此:
$model = new Model_Location();
$m = new Model_Meeting();
$model->getSelect()
->joinLeft(
"meetings as m",
"m.location_id = $model.id AND m.start < $value1 AND m.end > $value2",
array('occupied' => "m.name"));
->group('$model.id')
旁注:您的原始 sql 查询与您的 zend 查询不完全相同,因为在您的原始查询中您执行的是子查询,而在 zend 查询中您执行的是直接连接(哪个更好)。
我有这个SQL
查询:
select *
from locations
left join (select location_id, name as occupied
from meetings
where start < $value1 and end > $value2 limit 1) m
on locations.id = m.location_id;
locations
table 的每个位置都有很多会议,每个会议都属于一个特定的位置。每个会议都有开始时间和结束时间。通过该查询,我想从数据库中获取所有位置并向每个人添加一个 booked
列,如果该位置在给定间隔内被占用,则 occupied
列的值将是重叠的会议名称。
SQL
查询 returns 正是我想要的(例如 Location 1, Location 2, Location 3, etc
)。
我想在我的 ZEND 模型中使用相同的查询。现在我有
$model = new Model_Location();
$m = new Model_Meeting();
$model->getSelect()
->joinLeft(
"meetings as m",
"m.location_id = $model.id AND m.start < $value1 AND m.end > $value2",
array('occupied' => "m.name"));
这 returns 我所期望的,但是对于每次重叠的会议,我都会得到一个条目,它是 lcoation,导致 Location 1, Location 1, Location 2, Location 2, Location 2, Location 3, etc
。我怎样才能只获得不同的值?我知道 limit
不存在于我的 zend 查询中,但我不知道在哪里使用它。我在 joinLeft
之后和之前尝试过,但在那些情况下,它将我的模型限制为只有 1 个条目,而不仅仅是不同的条目。我也试过 ->distinct()
但也没用。
GROUP BY 是您要查找的内容,因此:
$model = new Model_Location();
$m = new Model_Meeting();
$model->getSelect()
->joinLeft(
"meetings as m",
"m.location_id = $model.id AND m.start < $value1 AND m.end > $value2",
array('occupied' => "m.name"));
->group('$model.id')
旁注:您的原始 sql 查询与您的 zend 查询不完全相同,因为在您的原始查询中您执行的是子查询,而在 zend 查询中您执行的是直接连接(哪个更好)。