ZEND Left Join Отдельный запрос - PullRequest
0 голосов
/ 08 мая 2018

У меня есть 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"));

, который возвращает то, что я ожидаю, но для каждого перекрывающегося собрания я получаю запись, это lcoation, в результате чего Location 1, Location 1, Location 2, Location 2, Location 2, Location 3, etc. Как я могу получить только отдельные значения? Я знаю, что limit нет в моем Zend-запросе, но я не знаю, где его использовать. Я пробовал после joinLeft и до него, но в тех случаях это ограничивает мою модель только одной записью, а не только отдельными. Я также пробовал ->distinct(), но тоже не работал.

1 Ответ

0 голосов
/ 08 мая 2018

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-запросе вы делаете прямое соединение (что лучше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...