【问题标题】:php/mysql : top 10 most scores by a memberphp/mysql : 成员得分最高的前 10 名
【发布时间】:2020-08-07 02:18:59
【问题描述】:

我正在从一张表制作记分牌,其中成员详细信息存储在一个表中,分数存储在另一个表中,成员外键。我知道我可以通过以下方式显示排行榜:

$lbquery = mysql_query("SELECT mid, SUM( score ) AS count FROM `memberscores` GROUP BY mid ORDER BY count DESC");
$lbrow = mysql_fetch_array($lbquery);

$memid = $lbrow["mid"];
$memscore = $lbrow["count"];

    $memquery = mysql_query("SELECT firstname, lastname FROM `members` WHERE `mid`=".$memid);
    $memrow = mysql_fetch_array($memquery);
    $fname = $memrow["firstname"];
    $lname = $memrow["lastname"];

echo $lname." ".$fname." = "$memscore;

但我很困惑如何显示前十个,因为我似乎必须使用循环来显示表中的前十个。但不确定如何使用。

【问题讨论】:

  • 你为什么要使用已弃用的 api 并在 PHP 7+ 中删除?
  • 我不明白,所以你的意思是说如果在php 7+中删除了某些东西,应该没有人使用吗?并且已经在商业上使用旧版本运行的应用程序会被删除?
  • @Hashmi 不,没有人应该使用它,您应该尝试在旧应用程序中摆脱它。你这样做只是在深入挖掘自己。如果您使用的 PHP 版本仍然有 mysql_query,那么它就死了,甚至不再接收重要的安全更新。开始远离它,或者至少围绕它编写自己的抽象层,这样你就不会直接使用它,并且可能有修复它的希望。
  • 这能回答你的问题吗? Why shouldn't I use mysql_* functions in PHP?

标签: php mysql sql join group-by


【解决方案1】:

我认为你想要一个简单的连接:

SELECT m.mid, m.firstname, m.lastname, SUM(s.score) cnt 
FROM memberscores s 
INNER JOIN members m ON m.mid = s.mid
GROUP BY m.mid, m.firstname, m.lastname 
ORDER BY cnt DESC
LIMIT 10

这会生成按总分排名前 10 位的用户的结果集,其中包括每个用户的名字和姓氏。然后,您可以逐行获取结果集并在您的应用程序中显示结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多