1

ユーザーが報告した運動距離のログを含むテーブルを使用しています。ログに記録された距離の合計でユーザーをランク付けしたいと考えています。

まず、すべてのユーザー ID を見つけます。

select distinct wordpress_user_id from wp_exercise_log

次に、それをループして、名前と合計 (距離) を取得します。

    foreach($users as $user) {
// DISTANCE
    $user_distance = floor($wpdb->get_var( "select sum(distance) from wp_exercise_log where wordpress_user_id='$user'"));
// FULL NAME
  $user_info = get_userdata($user);
  $full_name = $user_info-> user_firstname . ' ' . $user_info-> user_lastname;
}

ここに私の問題があります: それらを多次元配列に追加して PHP でソートしない限り、ユーザーをランク付けする方法がわかりません。

このすべてのデータを選択し、1 つの SQL クエリで並べ替えるより良い方法はありますか?

4

1 に答える 1

1
select
   wordpress_user_id, 
   sum(distance) as user_distance 
from 
   wp_exercise_log 
group by 
   wordpress_user_id 
order by 
   user_distance desc

ORDER BY GROUP_FUNCTION()常にパフォーマンスの問題を引き起こしていることに注意してください。

users テーブルにいくつかの列を追加user_total_distanceし、 での変更ごとに更新することを検討してくださいwp_exercise_log

于 2013-01-27T22:11:27.623 に答える