"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية استرداد أهم 5 عناصر من كل فئة في MySQL مع تجنب الخطأ "إرجاع الاستعلام الفرعي أكثر من صف واحد"؟

كيفية استرداد أهم 5 عناصر من كل فئة في MySQL مع تجنب الخطأ "إرجاع الاستعلام الفرعي أكثر من صف واحد"؟

تم النشر بتاريخ 2024-11-20
تصفح:264

How to Retrieve the Top 5 Items from Each Category in MySQL While Avoiding the

استرجاع أفضل 5 عناصر من كل فئة في MySQL

مواجهة الخطأ "يرجع الاستعلام الفرعي أكثر من صف واحد" أثناء محاولة جلب أعلى خمسة عناصر القائمة لكل فئة القائمة؟ الحل يكمن في استخدام متغيرات التأثير الجانبي.

دعونا نحلل المنهج المعدل:

في الاستعلام الفرعي، نقدم متغيرات التأثير الجانبي @r و@g باستخدام تدوين SQL @. تُستخدم هذه المتغيرات لتتبع عضوية المجموعة وزيادة الترتيب داخل كل مجموعة.

  1. @g:=null - تهيئة @g إلى NULL، للإشارة إلى أننا بدأنا مجموعة جديدة.
  2. @r:=0 - تهيئة @r إلى 0، مما يدل على بداية رتبة جديدة.
  3. عبارة WHERE في الاستعلام الفرعي (حيث m.menuid = s.menuid) يضمن محاذاة s وm بناءً على معرف القائمة.
  4. @r:=case عندما @g=m.profilename ثم @r 1 else 1 end - يزيد تعبير الحالة هذا @r بمقدار 1 إذا كان m.profilename هو نفس المجموعة الحالية (@g). بخلاف ذلك، فإنه يعيد تعيين @r إلى 1، مما يشير إلى بداية مجموعة جديدة.
  5. @g:=m.profilename - يقوم بتحديث @g باسم الملف الشخصي للمجموعة الحالية، مما يسمح لنا بتتبع الصفوف اللاحقة التي تنتمي إلى هذه المجموعة. المجموعة.
  6. يسترد الاستعلام الرئيسي اسم الملف الشخصي والاسم من الاسم المستعار لجدول الاستعلام الفرعي X.
  7. الشرط النهائي WHERE r

من خلال تنفيذ هذا النهج، يمكنك الحصول على النتائج المطلوبة بكفاءة دون ظهور الخطأ "يرجع الاستعلام الفرعي أكثر من صف واحد".

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3