Anonymous
Исправить проблему рейтинга
Сообщение
Anonymous » 19 апр 2025, 09:26
Это мой код, где я получаю ранжирование страны по коррупции по запросу Get < /p>
Код: Выделить всё
public function getByYear($year)
{
return $this->safeCall(function () use ($year) {
$rankings = CorruptionRanking::where('year', $year)
->orderBy('points', 'desc')
->get();
if ($rankings->isEmpty()) {
return $this->errorResponse('No data found for the given year', 404);
}
$rank = 1;
$rankings->each(function ($ranking, $index) use (&$rank, $rankings) {
if ($index > 0 && $ranking->points === $rankings[$index - 1]->points) {
$ranking->rank = $rank -1;
} else {
$ranking->rank = $rank;
$rank++;
}
$ranking->save();
});
return $this->successResponse('Rankings retrieved successfully', [
'year' => $year,
'rankings' => $rankings
]);
});
}
< /code>
И это мой выход < /p>
"rankings": [
{
"id": 1541,
"country_name": "Denmark",
"year": 2017,
"points": 8.8,
"rank": 1,
"created_at": "2025-04-17T11:41:36.000000Z",
"updated_at": "2025-04-19T05:37:40.000000Z"
},
{
"id": 1886,
"country_name": "Finland",
"year": 2017,
"points": 8.5,
"rank": 2,
"created_at": "2025-04-17T11:41:36.000000Z",
"updated_at": "2025-04-19T05:38:37.000000Z"
},
{
"id": 3680,
"country_name": "Norway",
"year": 2017,
"points": 8.5,
"rank": 2,
"created_at": "2025-04-17T11:41:38.000000Z",
"updated_at": "2025-04-19T05:38:37.000000Z"
},
{
"id": 4715,
"country_name": "Switzerland",
"year": 2017,
"points": 8.5,
"rank": 2,
"created_at": "2025-04-17T11:41:39.000000Z",
"updated_at": "2025-04-19T05:38:37.000000Z"
},
{
"id": 4370,
"country_name": "Singapore",
"year": 2017,
"points": 8.4,
"rank": 3,
"created_at": "2025-04-17T11:41:39.000000Z",
"updated_at": "2025-04-19T05:38:37.000000Z"
},
Но я ожидаю результатов, где Дания Рацените 1 его хорошие, а Финляндия, Норвегия, Швейцария 2, также хорош, но Сингапур, Швеция должна быть ранг 5, и это будет следовать последовательности ранжирования, спасибо
Подробнее здесь:
https://stackoverflow.com/questions/795 ... king-issue
1745043983
Anonymous
Это мой код, где я получаю ранжирование страны по коррупции по запросу Get < /p> [code]public function getByYear($year) { return $this->safeCall(function () use ($year) { $rankings = CorruptionRanking::where('year', $year) ->orderBy('points', 'desc') ->get(); if ($rankings->isEmpty()) { return $this->errorResponse('No data found for the given year', 404); } $rank = 1; $rankings->each(function ($ranking, $index) use (&$rank, $rankings) { if ($index > 0 && $ranking->points === $rankings[$index - 1]->points) { $ranking->rank = $rank -1; } else { $ranking->rank = $rank; $rank++; } $ranking->save(); }); return $this->successResponse('Rankings retrieved successfully', [ 'year' => $year, 'rankings' => $rankings ]); }); } < /code> И это мой выход < /p> "rankings": [ { "id": 1541, "country_name": "Denmark", "year": 2017, "points": 8.8, "rank": 1, "created_at": "2025-04-17T11:41:36.000000Z", "updated_at": "2025-04-19T05:37:40.000000Z" }, { "id": 1886, "country_name": "Finland", "year": 2017, "points": 8.5, "rank": 2, "created_at": "2025-04-17T11:41:36.000000Z", "updated_at": "2025-04-19T05:38:37.000000Z" }, { "id": 3680, "country_name": "Norway", "year": 2017, "points": 8.5, "rank": 2, "created_at": "2025-04-17T11:41:38.000000Z", "updated_at": "2025-04-19T05:38:37.000000Z" }, { "id": 4715, "country_name": "Switzerland", "year": 2017, "points": 8.5, "rank": 2, "created_at": "2025-04-17T11:41:39.000000Z", "updated_at": "2025-04-19T05:38:37.000000Z" }, { "id": 4370, "country_name": "Singapore", "year": 2017, "points": 8.4, "rank": 3, "created_at": "2025-04-17T11:41:39.000000Z", "updated_at": "2025-04-19T05:38:37.000000Z" }, [/code] Но я ожидаю результатов, где Дания Рацените 1 его хорошие, а Финляндия, Норвегия, Швейцария 2, также хорош, но Сингапур, Швеция должна быть ранг 5, и это будет следовать последовательности ранжирования, спасибо Подробнее здесь: [url]https://stackoverflow.com/questions/79582060/fix-the-ranking-issue[/url]