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

كيفية إرجاع القيم الافتراضية عند فشل استعلامات SQL ذات صف واحد؟

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

How to Return Default Values When Single Row SQL Queries Fail?

إرجاع القيم الافتراضية عند فشل استعلامات الصف الواحد

عند إجراء استعلامات SQL لاسترداد بيانات محددة، من الشائع مواجهة مواقف لا يوجد فيها صف مطابق موجود. لتجنب إرجاع نتائج فارغة، قد ترغب في توفير قيمة افتراضية.

ضع في اعتبارك عبارة SQL التالية التي تسترد العنصر المجدول التالي للبث:

SELECT `file`
FROM `show`, `schedule` 
WHERE `channel` = 1
  AND `start_time` <= UNIX_TIMESTAMP()
  AND `start_time` > UNIX_TIMESTAMP()-1800
  AND `show`.`id` = `schedule`.`file` 
ORDER BY `start_time`
DESC LIMIT 1

إذا لم يتم العثور على صف مطابق، فسيقوم هذا الاستعلام بإرجاع نتيجة فارغة. ومع ذلك، للتأكد من تشغيل شيء ما على الدفق في حالة عدم وجود عناصر مجدولة، يمكنك إرجاع قيمة افتراضية بدلاً من ذلك.

إحدى الطرق لتحقيق ذلك هي استخدام الدالة IFNULL أو COALESCE. من خلال تغليف الاستعلام الأصلي ضمن هذه الوظائف، يمكنك تحديد القيمة الافتراضية التي سيتم إرجاعها إذا لم يتم العثور على صف:

SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...
SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...

ومع ذلك، ستظل هذه المحاولات تؤدي إلى نتيجة فارغة عند عدم العثور على صفوف. لمعالجة هذه المشكلة، هناك أسلوب أكثر فاعلية وهو استخدام دالة مجمعة مثل MIN مع IFNULL:

SELECT IFNULL(MIN(`file`), 'default.webm') `file` 
  FROM `show`, `schedule` 
 WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP()
   AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file` 
 ORDER BY `start_time` DESC LIMIT 1
باستخدام الدالة التجميعية MIN، فإنك تضمن أنك ستحصل على نتيجة NULL إذا لم يتم تحديد أي سجلات. سيتم بعد ذلك استبدال هذه القيمة NULL بالقيمة الافتراضية المقدمة من IFNULL.

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

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

Copyright© 2022 湘ICP备2022001581号-3