mysql - MariaDB 查询问题(忽略 ORDER BY)

标签 mysql mariadb

我有一个运行良好的 MySQL 查询,但我的托管提供商将我的数据库更改为 MariaDB。查询本身工作正常,但我无法像在 MySQL 中那样使排序正常工作。

是否有某些语法已更改或不再可用?

    SELECT
 id,
  name,
  position,
  player1,
  player1_thru,
  player1_to_par,
  player2,
  player2_thru,
  player2_to_par,
  player3,
  player3_thru,
  player3_to_par,
  team_total,
  IF (counter = 1, @rank:= placeholder, @rank) AS ranker
FROM(
  SELECT
    *,
    @c := @c +1 AS placeholder,
    IF(@a <> team_total, @b := @b := 1, @b :=0) AS counter,
    @a := team_total
  from(
    SELECT
        usopen_2018.id,
        usopen_2018.position
        , usopen_2018.name
       , usopen_2018.player1
       , player1_score.hole as player1_thru
       , player1_score.to_par_s AS player1_to_par
       , usopen_2018.player2
       , player2_score.hole as player2_thru
       , player2_score.to_par_s AS player2_to_par
       , usopen_2018.player3
       , player3_score.hole as player3_thru
       , player3_score.to_par_s AS player3_to_par
       , (player1_score.`to_par` + player2_score.`to_par` + player3_score.`to_par`) AS team_total
    FROM usopen_2018
    INNER JOIN leaderboard_A AS player1_score
      ON player1_score.name = usopen_2018.player1
      AND player1_score.tournament_name = 'U.S. Open'
      AND player1_score.year = 2018
    INNER JOIN leaderboard_A AS player2_score
      ON player2_score.name = usopen_2018.player2
      AND player2_score.tournament_name = 'U.S. Open'
      AND player2_score.year = 2018
    INNER JOIN leaderboard_A AS player3_score
      ON player3_score.name = usopen_2018.player3
      AND player3_score.tournament_name = 'U.S. Open'
      AND player3_score.year = 2018
    WHERE usopen_2018.cut = 0 AND usopen_2018.wd = 0
    ORDER BY team_total, player1, player2, player3, name
  )AS t
)AS FINAL

最佳答案

ORDER BY 需要移出一层。

原因如下。 MariaDB 现在 遵守该标准,该标准表示子选择是一组无序行。也就是说,可以忽略内部 ORDER BY。 MariaDB 在最近的几个版本中已经这样做了; MySQL 在最新版本中也是这样做的。

过去,MySQL 和 MariaDB 盲目地执行用户请求的任何 ORDER BY。然后将结果按顺序提供给查询的下一阶段。

LIMIT 技巧

如果这不起作用,请在最里面的 SELECT 中的 ORDER BY 之后添加 LIMIT 99999999。这应该可以防止优化器忽略 ORDER BY,而实际上并未执行任何“限制”。

关于mysql - MariaDB 查询问题(忽略 ORDER BY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50862761/

相关文章:

python - 将带有 unicode 字符的 'Attribute' 类型(来自 python 2.7 ldap3 包)插入 MySQL 数据库

mysql - 如何在此表上正确设置 2 个外键约束以实现 2 个表之间的多对多关系?

mysql - 如何访问我的 docker mariadb?

mysql - MySQL 中按唯一列分组

php - 收到错误 'Error: INSERT INTO ` call`.`logs` (id, hashkey, ) VALUES (, XXX, )'

mysql - 如何使用 Group By 选择 1 到 5 天的数据

mysql - 是否可以索引运行总计以加速窗口函数?

mysql - 如何在mysql中按降序对两个不同的日期列进行排序?

php - wordpress查询所有以数字开头的帖子

php - mysqli 查询,其中 50% 在参数内,另一半是随机的