استرداد السجلات التي لها حد أدنى من السجلات ذات الصلة

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

  •  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 للفقرة بتسمية أي عمود لم يتم العثور عليه في المجموعة حسب الفقرة إذا لم يتم إرفاقه في دالة إجمالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top