استرداد السجلات التي لها حد أدنى من السجلات ذات الصلة
-
26-09-2019 - |
سؤال
هناك علاقة واحدة بين 2-MANY بين الممتلكات والحجز. الخاصية لها عمود يسمى "nr_of_bookings". أحتاج إلى DQL التي ستسترجع فقط الخصائص التي لديها (حجز) أقل من property.nr_of_bookins.
مثال: بعض الخصائص لديها nr_of_bookings = 3. إذا كان لديها 5 تحفظات ذات صلة ، فلن يتم استردادها. ولكن إذا كان لديه تحفظات ذات صلة ، فسيتم استردادها.
لقد جربت العديد من المجموعات ، لكني أفتقد شيئًا بملءًا. لقد نشرت سؤالًا مشابهًاهنا ، ولكن من الأفضل أن تبدأ من الصفر. شكرًا.
المحلول
هل جربت:
'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 للفقرة بتسمية أي عمود لم يتم العثور عليه في المجموعة حسب الفقرة إذا لم يتم إرفاقه في دالة إجمالية.