【问题标题】:How do I order a MySQL query with a count and ratio如何订购具有计数和比率的 MySQL 查询
【发布时间】:2026-01-17 10:55:01
【问题描述】:

我在使用计数和比率订购 MySQL 查询时遇到问题。

这是我目前正在使用的代码

$getKillers = mysql_query("SELECT `killer`, `killed`, count(`killer`), count(`killed`) FROM `kills` GROUP BY `killer`  ORDER BY count(`killer`) / count(`killed`) DESC LIMIT {$limit}");

这是我正在使用的数据库结构

CREATE TABLE `kills` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `killer` varchar(20) NOT NULL COMMENT 'The player who scored the kill',
  `killed` varchar(20) NOT NULL COMMENT 'The player who was killed',
  PRIMARY KEY (`id`),
  KEY `killer` (`killer`,`killed`)
) ENGINE=InnoDB AUTO_INCREMENT=680633 DEFAULT CHARSET=utf8 COMMENT='PVP Log';

-- ----------------------------
-- Records of kills
-- ----------------------------
INSERT INTO `kills` VALUES ('1', 'Player1', 'Player2');
INSERT INTO `kills` VALUES ('2', 'Player1', 'Player3');
INSERT INTO `kills` VALUES ('3', 'Player2', 'Player3');
INSERT INTO `kills` VALUES ('4', 'Player2', 'Player1');
INSERT INTO `kills` VALUES ('5', 'Player1', 'Player2');
INSERT INTO `kills` VALUES ('6', 'Player3', 'Player3');
INSERT INTO `kills` VALUES ('7', 'Player2', 'Player3');
INSERT INTO `kills` VALUES ('8', 'Player3', 'Player1');

我希望这个 SQL 在 PHP 中使用 mysql_fetch_array 来显示具有 KDR(杀死死亡比率)的* PVP,这是杀手超过被杀死的。这是他们杀死某人的次数超过他们被杀死的次数。

感谢您的帮助!

【问题讨论】:

  • 那么输出是什么呢?
  • PVP是指玩家对玩家?
  • 检查此SQLFiddle 了解 KDR 是否是您想要的。
  • 我想按KDR订购,所以*PVP玩家在顶部。当前的输出是随机的 KDR。

标签: php mysql sql count sql-order-by


【解决方案1】:

试试这个查询:

SELECT * , (SELECT COUNT( 1 ) 
            FROM kills b
            WHERE nested.killer = b.killed
           ) AS killed_cnt
FROM (    
   SELECT  `killer` , COUNT(  `killer` ) AS kill_cnt
   FROM  `kills` a
   GROUP BY  `killer`
) nested
ORDER BY kill_cnt / killed_cnt DESC 
LIMIT 10

【讨论】:

  • 抱歉,您的查询使网页显示“Internal Server Error 500”
  • 我在 phpmyadmin 中检查过 - 一切正常,如果您有“内部服务器错误 500”,请检查您的 php 错误日志,并检查您的 php 文件语法 (php -l your_file.php)跨度>