我正在使用一个包含用户报告的运动距离的日志的表。我想按用户记录距离的总和对用户进行排名。
首先,我找到所有用户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排序,否则我不确定如何对用户进行排名。
有没有更好的方法来选择所有这些数据并使用一个SQL查询对其进行排序?
答案 0 :(得分: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()
始终会导致性能问题。您可以考虑向用户表添加一些列user_total_distance
,并在wp_exercise_log
中的每次更改时对其进行更新。