php - 订单执行后?

标签 php mysql

我正在尝试编写一个 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 完成自定义排序。

PHP.net - usort documentation

也许你可以使用这样的东西:

$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/

相关文章:

mysql - 如何在 MySQL 中检查日期范围内的任何日期是否落在表中保存的日期之间

mysql - 如何使用连接从 4 个表中获取数据

Mysql Update 性能突然变差

php - 使用 Prepared Statement,我如何返回插入行的 id?

php - 如何在 Laravel 中使用 'after' 过滤器

php - 计数 Opencart 的总产品,包括选项

php - do...while 循环迭代次数太多,while 循环迭代次数太少 - php

php - 检查单个 MySQL 记录是否存在的有效方法?

php - 查询以检索 Laravel 5.2 中历史表中的最新条目

php - 根据值更新列,php mysql