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 查询中您执行的是直接连接(哪个更好)。