按字段对结果进行分组,但显示全部并按自定义顺序显示

Group results by field but show all and display in custom order

我目前正在使用以下内容来显示玩家列表

    $sql = <<<SQL
    SELECT pla.*, tea.*
    FROM Players pla
    INNER JOIN Teams tea USING (TeamID)
    WHERE TeamID = '$TeamID'
SQL;

我现在想对这些结果进行排序,将它们分组到不同的位置。因此,例如所有守门员按字母顺序显示在一起,然后是所有后卫。

我知道我可以

ORDER BY Position

然而,这将首先抛出 "attackers",我希望这些位置显示为守门员、后卫、中场、进攻者。我需要做 4 个单独的查询吗?

你可以做一个有条件的订单,它会做你想做的事

ORDER BY 
    CASE 
        WHEN position = "Goalkeepers" THEN 1
        WHEN position = "Defenders" THEN 2
        WHEN position = "Midfielders" THEN 3
        WHEN position = "Attackers" THEN 4
        ELSE 5
    END,
    name

我在末尾添加了位置,以便在按位置分组后按升序排列结果