سلام خسته نباشید
بنده یک جدول محصولات و یک جدول کامنتها دارم که رابطهی یک به چند بینشون وجود داره
در جدول کامنتها هر کامنتی که ثبت میشه یک امتیازی بین ۱ تا ۵ رو شامل میشه
وقتی همهی رکورد ها به صورت همزمان برگشت داده میشن به همراه میانگین امتیاز ها گرفته میشن که مشکلی در این موضوع نیست
اما وقتی میخوام که فقط محصولاتی که میانگین امتیازشون یک عدد تعیین شده هست رو بگیرم query که باید رو نمیتونم پیاده سازی کنم
یعنی مثلا بخوام کامنتایی که امتیازشون ۳ هست رو بگیرم ...
دوستان اگر کسی تجربه این کار و یا هر نظری داره ممنون میشم کمکم کنید
بنده برنامه نویس لاراول نیستم ولی از نظر منطق برنامه نویسی فکر میکنم برای حل این مشکل باید شما یک فیلد برای میانگین امتیازات اون محصول داخل دیتا بیس داشته باشدید که بعد از اینکه یک کامنت روی اون محصول زده میشه یک فانکشن ران بشه که میانگین امتیاز جدید اون محصول رو داخل اون فیلد آپدیت کنه
@Serjik
شما بیاین مقدار کل امتیاز های کامت ها هر محصول رو جمع کنید . مثلا 10 تا کامنت دارین . بیاین اونایی که امتیاز داده شده رو بردارید مقدارشون رو با هم جمع کنید بعد تقسیم بر تعداد کامنت هایی که امتیاز داده شده کنید میانگین بدست میاد بعد بر اساس میانگینشون محصولات رو لیست کنید .
نیاز به جدول و ... نداره کلش چندخط کد و یه تابع هست .
@hamed.molahoseiny.s
از شما ممنون بابت پاسختون
@ali.farmani
دوست عزیز من توی گرفتن میانگین میشکلی ندارم وقتی میخوام بر اساس میانگین نتایجی رو نمایش بدم به مشکل میخورم
سلام و خسته نباشید چون میانگین درون 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 به کار میبرم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟