所以,如果我的标题有点混乱,我相信它是。顺便说一句,我正在为我的sql使用medoo API,所以这只是一个小信息,所以你不要对以下例子感到困惑。
示例表
+----+------------+----------------+-------------+
| id | playerName | infractionType | infractedBy |
+----+------------+----------------+-------------+
| 1 | Alpha | ET1 | Admin |
| 2 | Alpha | ET1 | Admin |
| 3 | Alpha | ET1 | Admin |
| 4 | Delta | ET1 | Admin |
| 5 | Echo | ET1 | Admin |
| 6 | Echo | ET1 | Admin |
| 7 | Delta | ET1 | Admin |
| 8 | Alpha | ET1 | Admin |
+----+------------+----------------+-------------+
好的,让我们回顾一下基础知识。如果你像这样做一个foreach循环:
foreach ($medoo->query("SELECT * FROM table1) as $entry) {
echo $entry['playerName'];
}
因此您应该知道将打印出所有playerName。现在我想要的是打印出playerName的出现并回显出来。因此,对于非有序打印,代码将在这些行的某处:
foreach ($medoo->query("SELECT DISTINCT playerName FROM table1) as $entry) {
echo $entry['playerName'];
echo $medoo->count("infractions", ["playerName" => $entry['playerName']);
}
尽管如此“我没有订购”我想要的是订购它,我不知道如何这样做。我看了一遍谷歌看到了'count()'sql命令,但据我所知它对我来说基本没用。
我想知道的事情
当前代码
foreach ($GoldenData->query("SELECT DISTINCT playerName FROM infractions") as $player) {
foreach ($GoldenData->query("SELECT COUNT(playerName) AS playerName FROM infractions WHERE playerName = '" . $player['playerName'] ."' ORDER BY COUNT(playerName) DESC") as $infracted) {
echo "<tr>";
echo "<td>";
echo $player['playerName'];
echo "</td>";
echo "<td>";
echo $infracted['playerName'];
echo "</td>";
echo "<tr>";
}
}
我想解释什么
这也在评论中,但我只是在这里添加,以便其他人可以更好地看到它。
所以这个想法基本上是按TOTAL INFRACTIONS的数量进行排序,并按降序排序(从最低到最低)。现在的问题是我没有列'totalInfractions'我不想添加,除非没有其他方法没有列。所以问题是如果可以在不添加'totalInfractions'列的情况下执行此操作,或者是否有其他方法可以通过其他SQL STATEMENTS或PHP函数执行此操作。
如果您不理解某些内容,请告诉我,我会尝试清除它。我明白我要求的是有点混乱。
答案 0 :(得分:1)
如果我明白你想要完成什么......
我运行了这个查询:
SELECT COUNT(id), playerName from Example group by playerName;
输出是这样的:
+-----------+------------+
| count(id) | playername |
+-----------+------------+
| 4 | Alpha |
| 2 | Delta |
| 2 | Echo |
+-----------+------------+
我们正在做的是COUNTing每个ID(因为每个条目代表一次违规,这相当于计算违规次数),然后按玩家名称进行GROUPing,这样我们就可以得到每个玩家的总数。这接近你想要做的吗?
我为格式不佳的复制/粘贴结果表道歉,我不知道如何让它看起来更好。
如果将来添加更多infractionTypes,您可能需要这样的内容: SELECT COUNT(id),playername,infractionType来自示例GROUP BY infractionType,playername;
将产生如下结果:
+-----------+------------+----------------+
| count(id) | playername | infractionType |
+-----------+------------+----------------+
| 3 | Alpha | ET1 |
| 1 | Delta | ET1 |
| 1 | Alpha | ET2 |
| 1 | Delta | ET2 |
| 2 | Echo | ET2 |
+-----------+------------+----------------+