我有一个名为“Rating”的MySQL表,其中包含(id,rateable_id,rating,user_id)列。 rateable_id是评级的记录的id,评级的评分存储在评级(星级评分)中。
我想要做的就是找到特定的rateable_id(分组),其sum和其他rateable_id之和最大。
在上面的示例表中,我应该得到rateable_id = 26,因为与其他rateable_id相比,它的评级为max((3 + 3)/ 2)= 3。 原始的sql或eloquent任何首选。
编辑很抱歉提及但我已经粗略地做了非标准方式
无论如何它返回答案但我正在寻找使用嵌套的选择答案。 averageRating是用于计算平均等级的willvincent包。 $ popular_post返回平均评级总和最大的id。
$posts = "App\Opportunity"::all(); //where(createdate < 1month)
$i=11;
$cr=0;
$pr=0;
$mi = 0; //max index
$maxR=0; //max rating value
for($i=0; $i< count($posts); $i++)
{
$cr = $posts[$i]->averageRating; //current rating
if($cr)<br>
{
if($cr > $maxR)
{
$maxR = $cr;
$mi = $i;
}
}
else
{
// echo "skip<br>";
}
}
$popular_post = ($posts[$mi]->id);
答案 0 :(得分:1)
您将需要2个选择:
SELECT MAX(rating) rating, rateable_id FROM (
SELECT AVG(rating) rating, rateable_id FROM table GROUP BY reateble_id
) GROUP BY rateable_id ORDER BY rating LIMIT 1
答案 1 :(得分:0)
我认为这对你有所帮助。
$ratings = Rating::all()->groupBy('rateable_id');
$topList = [];
foreach($ratings as $key => $value){
$topList[$key] = ($value->sum('rating')) / count($value);
}
arsort($topList); //sort the array by top values
$max_rateable_id = key($topList); //key of first item of the array
$max_rating = reset($topList); //value of first item of the array
$both = [$max_rateable_id => $max_rating]; //key and value of the first item of the array