رفتن به مطلب

کوئری بر اساس اطلاعات لحظه ای


پست های پیشنهاد شده

سلام.

برای نمایش مطالب نیاز به یک کوئری خاص داریم.

فرض کنید به هر پست امتیاز داده میشه، ما میخوایم نرخ رشد امتیاز پست ها رو محاسبه کنیم. مثلا اگه یه پست در طول 1 هفته 100 امتیاز داشت، از پستی که در طول 2 ماه 150 امتیاز داشت بالاتر قرار بگیره.

حالا با زیاد شدن تعداد امتیازها، ما نیاز داریم که این اطلاعات بر اساس ساعت یا حتی دقیقه (و نه هفته) محاسبه بشه.

سوالم اینجاست که چجوری پست ها رو بر اساس مقادیر محاسبه شده sort کنم؟

ذخیره کردن لحظه ای این نرخ رشد ها توی دیتابیس و خوندن اون در هر بار که صفحه بارگذاری میشه کار درستیه؟

لینک به ارسال

سلام٬ کار مشکلی هست.

شما اول باید تعداد روز گذشته از ارسال یه پست رو بگیرین (مثلا ۷ روز)

بعدش برید امتیاز رو بگیرین

حالا هر امتیاز رو تقسیم بر تعداد روز گذشته کنین

براساس عدد دست اومده پست ها رو نمایش بدید

اینجوری یه پست با امتیاز ۵ بعد ۵ روز از یه پست با امتیاز ۵ در ۷ روز جلو تر نمایش داده میشه

موفق باشید

لینک به ارسال

علی جان این ها رو بلد بودم و انجام دادم ، مشکلم اینجاست که چجوری بر اساس عدد به دست اومده پست ها رو مرتب کنم؟

(این عدد لحظه ای محاسبه میشه و خب نمیشه هر سری صفحه رو لود میکنن اون رو یبار تو دیتابیس به عنوان متا ذخیره کنیم و بعد از روش بخونیم.)

اگه راهی به ذهنتون رسید بگید لطفا.

تشکر

لینک به ارسال

کسی از اینکه متا رو توی دیتابیس ذخیره کنین صحبت نکردم.

شما همواره روز ارسال پست رو توی دیتابیس دارین ، (این رو از دیتابیس میگیرین) و همینطور امتیازی که به پست هم دادن همیشه توی دیتابیس دارین (اینم از دیتابیس میگیرین) ، حالا با PHP این 2 تا عدد رو تقسیم بر هم میکنین (توجّه: نیازی به ذخیره اون در هیچ جا نیست! کاملاً با PHP روی هوا انجام میشه).

خب حالا مثلاً اگر پستی امتیازش 5 باشه و 5 روز گذشته باشه از گذاشتنش 5/5=1 ، درست؟

اگر یه پست دیگه همین امتیاز 5 رو داشته باشه و 7 روز گذشته باشه از گذاشتنش 5/7= 0.74... ، اینم درست؟

خب حالا باید اینا رو با وسیله تابع وردپرس get_posts بگیریشون و بکنیشون توی array ، حالا باید با foreach چاپشون کنین مثل زیر:


<?php global $post; // required
$args = array('category' => -9); // exclude category 9
$custom_posts = get_posts($args);
foreach($custom_posts as $post) : setup_postdata($post);
...
endforeach;
?>

منتهی قبل از اینکه به وسیله کد بالا چاپش کنین باید از طریق اون مقدار امتیاز بر اساس روز گذشته sortشون کنین

مثل:

http://php.net/manual/en/function.sort.php

باید PHP رو یاد داشته باشین تقریباً تا بتونین اینکار رو انجام بدین.

لینک به ارسال

مرسی، یه چیزی رو من یادم رفت بگم، اینه که میخوام از pre_get_posts استفاده کنم. فرض کنید یه کوئری نوشته شده، حالا بر اسا یه مقداری که از url میگیره، (مثلا &sort=avarage) بخوایم بدون نوشتن کوئری جدید، همون رو بگیم بر اساس این میانگین ها sort کنه. البته خودم یه راهی پیدا کردم امروز. این بود که اول آیدی پست ها رو بگیرم و مرتب کنم، بعد بدم به pre get posts. کار میکنه، اگه راه اصولی تر و بهتری پیدا کردید بگید.

لینک به ارسال
مرسی، یه چیزی رو من یادم رفت بگم، اینه که میخوام از pre_get_posts استفاده کنم. فرض کنید یه کوئری نوشته شده، حالا بر اسا یه مقداری که از url میگیره، (مثلا &sort=avarage) بخوایم بدون نوشتن کوئری جدید، همون رو بگیم بر اساس این میانگین ها sort کنه. البته خودم یه راهی پیدا کردم امروز. این بود که اول آیدی پست ها رو بگیرم و مرتب کنم، بعد بدم به pre get posts. کار میکنه، اگه راه اصولی تر و بهتری پیدا کردید بگید.

نه من راهی به ذهنم نمیرسه جز اونی که خودم گفتم...

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...