یلدا ادامه داره... ❤️ ۴۰ درصد تخفیف همه دوره‌ها

استفاده از تخفیف‌ها
ثانیه
دقیقه
ساعت
روز
Ali Ghaleyan
5 سال پیش توسط Ali Ghaleyan مطرح شد
4 پاسخ

Query رتبه بندی براساس ستاره های اختصاص داده شده در جدول

سلام خسته نباشید
بنده یک جدول محصولات و یک جدول کامنتها دارم که رابطه‌ی یک به چند بینشون وجود داره
در جدول کامنتها هر کامنتی که ثبت میشه یک امتیازی بین ۱ تا ۵ رو شامل میشه
وقتی همه‌ی رکورد ها به صورت همزمان برگشت داده میشن به همراه میانگین امتیاز ها گرفته میشن که مشکلی در این موضوع نیست
اما وقتی میخوام که فقط محصولاتی که میانگین امتیازشون یک عدد تعیین شده هست رو بگیرم query که باید رو نمیتونم پیاده سازی کنم
یعنی مثلا بخوام کامنتایی که امتیازشون ۳ هست رو بگیرم ...
دوستان اگر کسی تجربه این کار و یا هر نظری داره ممنون میشم کمکم کنید


ثبت پرسش جدید
Hamed حامی
@hamed.molahoseiny.s 5 سال پیش مطرح شد
1

بنده برنامه نویس لاراول نیستم ولی از نظر منطق برنامه نویسی فکر میکنم برای حل این مشکل باید شما یک فیلد برای میانگین امتیازات اون محصول داخل دیتا بیس داشته باشدید که بعد از اینکه یک کامنت روی اون محصول زده میشه یک فانکشن ران بشه که میانگین امتیاز جدید اون محصول رو داخل اون فیلد آپدیت کنه


علی فرمانی
تخصص : فرانت اند
@farmani 5 سال پیش آپدیت شد
1

@Serjik
شما بیاین مقدار کل امتیاز های کامت ها هر محصول رو جمع کنید . مثلا 10 تا کامنت دارین . بیاین اونایی که امتیاز داده شده رو بردارید مقدارشون رو با هم جمع کنید بعد تقسیم بر تعداد کامنت هایی که امتیاز داده شده کنید میانگین بدست میاد بعد بر اساس میانگینشون محصولات رو لیست کنید .
نیاز به جدول و ... نداره کلش چندخط کد و یه تابع هست .


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 5 سال پیش مطرح شد
0

@hamed.molahoseiny.s
از شما ممنون بابت پاسختون

@ali.farmani
دوست عزیز من توی گرفتن میانگین میشکلی ندارم وقتی میخوام بر اساس میانگین نتایجی رو نمایش بدم به مشکل میخورم


هشنا
@hashna 5 سال پیش آپدیت شد
1

سلام و خسته نباشید چون میانگین درون SELECT انجام میدهید بعد از همه پردازش میشه و نمی تونید درون WHERE استفاده کنید ولی می تونید از INNER JOIN استفاده کنید مثل نمونه کد زیر

SELEC * FROM tbl t INNER JOIN (SELECT t1.id, AVG(t1.rate) as avgrate FROM tbl t1 GROUP BY p.id) tavg ON t.id = tavg.id WHERE tavg.avgrate < 3

در اصل درون یک SELECT دارم میانگین را حساب می کنم و در SELECT بیرونی از میانگین به عنوان یک ستون در استفاده درون WHERE به کار میبرم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام