ZEND左加入不同的查询

时间:2018-05-08 15:15:46

标签: php sql zend-framework

我有这个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表中的每个位置都有很多会议,每个会议都属于一个特定的位置。每次会议都有开始时间和结束时间。使用该查询,我想从数据库中获取所有位置,并向每个人添加booked列,如果该位置在给定的时间间隔内被占用,则occupied列的值将为是重叠的会议名称。

SQL查询完全返回我想要的内容(例如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"));

返回我期望的内容,但是对于每次重叠的会议,我都会得到一个条目,它会导致Location 1, Location 1, Location 2, Location 2, Location 2, Location 3, etc。我怎样才能得到不同的值?我知道limit不是&#39;出现在我的查询中,但我不知道在哪里使用它。我在joinLeft之前和之前尝试过,但在这种情况下,它将我的模型限制为只有1个条目,而不仅仅是不同的条目。我也试过->distinct(),但也没有工作。

1 个答案:

答案 0 :(得分:2)

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查询与您的原始查询不完全相同,因为在您的原始查询中您正在执行子查询,而在您的原始查询中您正在进行直接连接(其中更好)。