Получение записей, которые имеют минимальное количество связанных записей

StackOverflow https://stackoverflow.com/questions/4025574

  •  26-09-2019
  •  | 
  •  

Вопрос

Существует один-2-много отношения между имуществом и бронированием. Имущество имеет столбец под названием «NR_OF_Bookings». Мне нужен DQL, который извлечет только свойства, имеющие количество (бронирование) меньше, чем Property.nr_of_Bookins.

Пример: некоторое свойство имеет nr_of_bookings = 3. Если он имеет 5 бронирований, это не будет получено. Но если он имеет 2 смежных бронирования, он будет получен.

Я попробовал многочисленные комбинации, но я скучаю по поводу чего-то очевидно. Я разместил подобный вопросздесь , но лучше начать с нуля. Спасибо.

Это было полезно?

Решение

Ты пытался:

'SELECT p FROM Product p WHERE SIZE(p.reservations) < p.nr_of_bookings'

Редактировать: приведенное выше для доктрины 2. Для доктрины 1.2, глядя на свой код, я предполагаю, что ваш HAVING Пункт ссылается на то, что не в группе или результат агрегатной функции. Попробуйте что-то вроде этого:

$q = PropertyTable::getInstance()
    ->createQuery('p') 
    ->select('p.*, COUNT(r.id) as num_of_reservations, SUM(p.nr_of_bookings) as num_bookings') 
    ->leftJoin('p.Reservation r') 
    ->groupBy('p.id') 
    ->having('num_of_reservations < num_bookings');

Вы группируете p.id так SUM(p.nr_of_bookings) будет равно p.nr_bookings.

Из документации MySQL:

SQL Standard не позволяет получить предложение называть любые столбцы, не найденные в группе по предложению, если он не заключен в совокупную функцию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top