执行后订单?

时间:2013-12-26 22:01:06

标签: 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上具有最高价值的用户。我已经尝试了很多东西,但没有连续。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以采用这种不同的方式。

如果您已经从数据库加载了所有数据,则可以使用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; 

如果您想使用更复杂的数据结构,您所要做的就是实施特殊比较,以确保按分数排序。

如果将点存储在数据库中,则可以使用包含ORDER BY子句的特殊查询,这样就可以返回已订购的用户。

我认为使用DBMS对用户进行排序会产生更具伸缩性的解决方案。如果您的用户数量非常多,那么对每个页面加载的所有用户进行排序都不会很好。

答案 1 :(得分:1)

首先,抱歉建议另一个执行流程。接下来,这是我的解决方案:

$getScore = $db->prepare("SELECT * FROM `users`;");
$getScore->execute();
$results = $getScore->fetchAll();

// Result is something like [rownum][colomname]

array_walk_recursive($results, function($item, $key) {
    $id = $item["id"];
    $date = $item["date"];

    $arr = array();

    $arr['likes'] = $get->likes("user", $id);
    $arr['subscribers'] = $get->subscribers("user", $id);
    $arr["score"] = $get->score($arr["likes"], 
                                $arr["subscribers"],
                                $date);

    $item = array_merge($item, $arr);
});

在此代码中,您可以从数据库中获取结果。接下来,您计算分数之类的内容,然后将其添加到数组中。

要在乐谱上对此数组进行排序,您可以使用PHP多重排序功能(http://php.net/manual/en/function.array-multisort.php):

foreach ($results as $key => $row) {
    $score[$key] = $row["score"];
}

array_multisort($score, SORT_DESC, $results);

当您循环循环以打印数据时,您可以这样做:

foreach($results as $row) {
    $likes = $row["likes"];
    $subscribers = $row["subscribers"];
    $score = $row["score"];

    echo("your stuff over here");
}
祝你好运!