我有这个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()
,但也没有工作。
答案 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查询与您的原始查询不完全相同,因为在您的原始查询中您正在执行子查询,而在您的原始查询中您正在进行直接连接(其中更好)。