これは、1 つの mysql クエリですべてを行うには非常に複雑なクエリになります。個人的には、PHPでこれを行います。これは、PHP と MySQLi でそれを行う方法の例です。
$ratings = array();
$query = "SELECT * FROM ratings";
$results = $dbConn->query($query);
//First we load all results into a big array.
while($row = $results->fetch_assoc($results) {
if(!isset($ratings[$row['rating_id']]) {
$ratings[$row['event_id']]['count'] = 0;
}
$ratings[$row['event_id']]['count']++;
$ratings[$row['event_id']]['organisation'] += $row['organisation'];
$ratings[$row['event_id']]['value_for_money'] += $row['value_for_money'];
$ratings[$row['event_id']]['fun_factor'] += $row['fun_factor'];
$ratings[$row['event_id']]['facilities'] += $row['facilities'];
}
//Now we go through each event and average out the results.
$averages = array();
foreach($ratings as $event_id => $data) {
$averages[$event_id]['organisation'] = $data['organisation'] / $data['count'];
$averages[$event_id]['value_for_money'] = $data['value_for_money'] / $data['count'];
$averages[$event_id]['fun_factor'] = $data['fun_factor'] / $data['count'];
$averages[$event_id]['facilities'] = $data['facilities'] / $data['count'];
}
//Now we can sort by whatever we want to:
または、4 つの評価すべての平均が必要な場合は、平均の代わりにこのビットを最後に使用できます。
$averages = array();
foreach($ratings as $event_id => $data) {
$averages[$event_id] = (($data['organisation'] + $data['value_for_money'] + $data['fun_factor'] + $data['facilities']) / 4) / $data['count'];
}
注意: 私はこのコードをテストしていません...自分でバグがないかチェックしてください。
並べ替えについては、多次元配列の並べ替えに関するさまざまなスタック オーバーフローの回答を確認してください。多次元配列を値でソートする
か、PHP で多次元配列をソートする方法