البرمجة

استعلام MySQL: استرجاع السجلات بناءً على فاصل زمني 12 ساعة

عندما نتحدث عن استعلام SQL لاسترجاع البيانات بناءً على الفاصل الزمني، يتطلب الأمر استخدام دالة الوقت وتعبير مناسب للتاريخ والوقت في قاعدة البيانات. في حالتك، يتعين عليك استخدام دالة مثل TIMESTAMPDIFF لحساب الفاصل الزمني بين الوقت الحالي والوقت المخزن في الجدول. يجب أيضًا أن تأخذ بعين الاعتبار تنسيق الوقت في قاعدة البيانات الخاصة بك.

للبداية، يجب عليك تصحيح استعلام SQL الخاص بك كما يلي:

sql
SELECT domain FROM monitoring WHERE status = 'active' AND TIMESTAMPDIFF(HOUR, STR_TO_DATE(submit_time, '%m-%d-%Y %H:%i:%s'), NOW()) > 12 ORDER BY STR_TO_DATE(submit_time, '%m-%d-%Y %H:%i:%s') DESC;

في هذا الاستعلام:

  • TIMESTAMPDIFF(HOUR, STR_TO_DATE(submit_time, '%m-%d-%Y %H:%i:%s'), NOW()) يستخدم لحساب الفاصل الزمني بالساعات بين submit_time والوقت الحالي.
  • STR_TO_DATE(submit_time, '%m-%d-%Y %H:%i:%s') يُستخدم لتحويل السلسلة الزمنية المخزنة في الجدول إلى تنسيق يمكن فهمه.
  • ORDER BY STR_TO_DATE(submit_time, '%m-%d-%Y %H:%i:%s') DESC يضمن ترتيب النتائج بحسب الوقت بتناقص، لتظهر أقدم الإدخالات أولاً.

يرجى استبدال '%m-%d-%Y %H:%i:%s' بتنسيق الوقت الفعلي في قاعدة البيانات الخاصة بك إذا كان يختلف عن المذكور. يمكنك الآن استخدام هذا الاستعلام لاسترجاع السجلات التي تم التقاطها قبل 12 ساعة، مع ترتيبها بحسب الزمن.

المزيد من المعلومات

عند التعامل مع قاعدة بيانات MySQL والبحث عن سجلات تعود إلى فترة زمنية محددة، يجب أن نكون حذرين للتأكد من توافق تنسيق الوقت في الجدول مع التنسيق المستخدم في الاستعلام. في سياق قاعدة البيانات التي تحتوي على تواريخ بتنسيق “يوم-شهر-سنة ساعة:دقيقة:ثانية”، يكون استخدام دالة STR_TO_DATE ضروريًا لتحويل السلسلة النصية إلى نوع الوقت في MySQL.

لاحظ أن استخدام NOW() يُستخدم للحصول على الوقت الحالي. إذا كنت ترغب في فحص السجلات بناءً على وقت آخر غير الوقت الحالي، فيمكنك استبدال NOW() بالتاريخ والوقت المطلوب.

يمكن أيضًا تحسين أداء الاستعلام عن طريق تجنب استخدام دوال في عمود WHERE، ولكن يجب ضمان أن تنسيق الوقت في الجدول يمكن استخدامه مباشرة. في حالتك، يمكنك تحسين الاستعلام كالتالي:

sql
SELECT domain FROM monitoring WHERE status = 'active' AND submit_time <= NOW() - INTERVAL 12 HOUR ORDER BY STR_TO_DATE(submit_time, '%m-%d-%Y %H:%i:%s') DESC;

هذا الاستعلام يستخدم NOW() - INTERVAL 12 HOUR للحصول على الوقت الحالي قبل 12 ساعة. تأكد من التحقق من الأداء والتوافق مع تنسيق الوقت في قاعدة البيانات الخاصة بك.

زر الذهاب إلى الأعلى