我正在尝试编写一个 PHP 脚本,它根据积分系统对用户进行排序。问题是积分是在我执行用户之后计算的。像这样:
$getScore = $db->prepare("SELECT * FROM `users`");
$getScore->execute();
$results = $getScore->fetchAll();
foreach($results as $row):
$likes = $get->likes("user", $row["id"]);
$subscribers = $get->subscribers("user", $row["id"]);
$score = $get->score($likes, $subscribers, $row["date"]);
echo $row["username"];
endforeach;
如果不进行另一次执行,我如何对结果进行排序?我希望首先显示 $score
上具有最高值的用户。我尝试了很多事情,但没有成功。
提前致谢!
最佳答案
您可以通过不同的方式实现这一点。
如果您已经从数据库加载了所有数据,您可以使用 PHP 来订购它们。 可以使用 usort 完成自定义排序。
也许你可以使用这样的东西:
$users = array();
// Load all the users and calculate scores
foreach($results as $row):
$users[$row["username"]] = $get->score($likes, $subscribers, $row["date"]);
endforeach;
// Sort users based on score
sort($users);
// Output users, sorted by score
foreach($score as $key => $row):
echo $key, " score:", $score;
endforeach;
如果你想使用更复杂的数据结构,你所要做的就是实现特殊的比较,以确保使用 usort 按分数排序。
如果您将积分存储在数据库中,则可以使用包含 ORDER BY 子句的特殊查询,这样可以返回已订购的用户。
我认为使用 DBMS 对用户进行排序将产生更具可扩展性的解决方案。如果您的用户数量非常多,那么对每个页面加载的所有用户进行排序的效果不会很好。
关于php - 订单执行后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791842/