Php 内部连接查询以获取每个武器的结果

Php 内部连接查询以获取每个武器的结果,php,mysql,sorting,inner-join,Php,Mysql,Sorting,Inner Join,我有一个内部连接的查询,但是武器是未知的。 我想为每件武器找到最好的杀手。如何处理此查询?我对高级查询不是很有经验 $q = $mysql->query("SELECT `killerID` , COUNT(`killerID`) AS tot_kills , MIN(`Username`) AS username FROM `kills` INNER JOIN `players`

我有一个内部连接的查询,但是武器是未知的。 我想为每件武器找到最好的杀手。如何处理此查询?我对高级查询不是很有经验

    $q = $mysql->query("SELECT `killerID`
            , COUNT(`killerID`) AS tot_kills
            , MIN(`Username`) AS username
            FROM `kills`
            INNER JOIN `players`
            ON `players`.`id` = `kills`.`killerid`
            WHERE `killText` LIKE '%###WEAPON###%'
            GROUP BY `killerID`
            ORDER BY `tot_kills` DESC") or die($mysql->error);

由于使用的是
join
,因此需要在select子句中指定表名。 尝试以下方法:

SELECT `kills`.`killerID`
            , COUNT(`kills`.`killerID`) AS tot_kills
            , MIN(`players`.`Username`) AS username
            FROM `kills`
            INNER JOIN `players`
            ON `players`.`id` = `kills`.`killerid`
            WHERE `kills`.`killText` LIKE '%###WEAPON###%'
            GROUP BY `kills`.`killerID`
            ORDER BY `kills`.`tot_kills` DESC

我认为你应该按武器分组,而不是按杀手id分组,因为你想要的是
killerID
by
武器

请注意,您不需要所有这些回退。只有当查询中的表名或列名是保留字之一时,才需要反勾号

SELECT killerID
        , COUNT(killerID) AS tot_kills
        , MIN(Username) AS username
FROM kills
INNER JOIN players
  ON players.id = kills.killerid
WHERE killText LIKE '%###WEAPON###%'
GROUP BY kills.killText
ORDER BY tot_kills DESC

仅当两个表共享同名的列时,以及仅当在查询中使用该列名时,才需要此选项。