في Laravel، عند الاستعلام عن قاعدة بيانات، قد تواجه الحاجة إلى تجميع النتائج حسب الأيام بدلاً من الطوابع الزمنية. فيما يلي سؤال وإجابة تفصيلية لمعالجة هذا السيناريو المحدد:
لدي جدول يسمى page_views، والذي يخزن سجلات زيارات الصفحة إلى جانب الطوابع الزمنية وعناوين IP للمستخدم ومعرفات الصفحات . على الرغم من استخدام طريقة groupBy، لا تقوم الاستعلامات بتجميع البيانات بشكل صحيح حسب الأيام بسبب الاختلافات في الثواني ضمن الطوابع الزمنية.
أرغب في جلب النتائج بناءً على مرات المشاهدة يوميًا، والتي يجب أن تكون على النحو التالي:
date views ==== ===== 10-11-2013 15 10-12 2013 45 ... ...
هل يمكن لأي شخص تقديم رؤى أو حلول؟
لتجميع النتائج بشكل فعال حسب الأيام، تقترح الإجابة الاستفادة من وظيفة DATE() الخاصة بـ MySQL، الذي يستخرج جزء التاريخ من قيمة DateTime:
DB::table('page_views') ->select(DB::raw('DATE(created_at) as date'), DB::raw('count(*) as views')) ->groupBy('date') ->get();
ومع ذلك، فإن أسلوب الاستعلام الأولي هذا ينحرف عن بناء جملة منشئ الاستعلامات في Eloquent. للحصول على حل أكثر توجهاً نحو Eloquent، تقدم الإجابة ما يلي:
$visitorTraffic = PageView::where('created_at', '>=', \Carbon\Carbon::now->subMonth()) ->groupBy('date') ->orderBy('date', 'DESC') ->get(array( DB::raw('Date(created_at) as date'), DB::raw('COUNT(*) as "views"') ));
يستخدم هذا الاستعلام التواريخ الكربونية في جملة حيث الأولية للمقارنة ويطبق التعبيرات الأولية لقاعدة البيانات المناسبة ضمن طريقة get لاسترداد كل من التاريخ وعدد مرات العرض.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3