Mysql - 将变量传递给子查询 From 子句

标签 mysql sql variables select dynamic

我正在处理以下查询,您将找到示例数据 on this db fiddle :

SET @count=0; 
SELECT ( @rank := IF(@points = points, @rank + 1, IF(@points := points, @rank + 1, @rank + 1)) ) AS rank,
       er.* 
FROM (SELECT cc6_MensLeague_players.id AS `id`, 
             ( 1288 ) AS points, 
             (SELECT Max(@count := IF(outcome = 2, @count + 1, 0)) AS max_consecutive_wins 
              FROM (SELECT * 
                    FROM cc6_MensLeague_rounds 
                    WHERE player = 785 
                    ORDER BY date ASC) AS temp
              ) AS `maxcon` 
      FROM cc6_MensLeague_players 
      GROUP BY `id`) er 
CROSS JOIN (SELECT @rank := 0, @points := -1) params 
ORDER BY id DESC; 

这段代码工作完美(感谢 Tobias Thornfeldt Nissen),但我现在想做的是使玩家 id(785)动态...我似乎无法传递我的 id 变量(cc6_MensLeague_players.id)到子查询 from 子句。

我尝试过以下方法:

  1. 添加@id :=... cc6_mensleague_players.id AS id ... 开头和改变... WHERE player = 785 ...... WHERE player = @id ...运气不好!

  2. 更改... player = 785 ORDER BY DATE ASC ...... player = @id GROUP BY ID ORDER BY DATE ASC ...运气不好!

  3. 我还尝试了一些其他策略,但我就是想不通。

所以我的问题是: 我该如何制作WHERE player = cc6_mensleague_players.id (第 9 行)工作吗?

如果您能为我指明正确的方向,我将不胜感激。

谢谢。

最佳答案

您可以使用为子查询提供的别名作为id:

SET @count=0;

SELECT ( @rank := IF(@points = points, @rank + 1,
                  IF(
                  @points := points,
                           @rank + 1,
                                    @rank + 1)) )
       AS rank,
       er.*
FROM   (SELECT cc6_MensLeague_players.id
               AS
                      `id`,
               ( 1288 )
               AS
                      points,
               (SELECT Max(@count := IF(
                           outcome = 2,
                                     @count + 1,
                                     0)) AS
                       max_consecutive_wins
                FROM   (SELECT *
                        FROM
               cc6_MensLeague_rounds
                        WHERE  player = `id`
                        ORDER  BY date ASC) AS
                       temp) AS
                      `maxcon`
        FROM   cc6_MensLeague_players
        GROUP  BY `id`) er
       CROSS JOIN (SELECT @rank := 0,
                          @points := -1) params
ORDER  BY id DESC;

关于Mysql - 将变量传递给子查询 From 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729442/

相关文章:

mysql - 1170 - BLOB/TEXT 列 'XXX' 用于 key 规范,但没有 key 长度

sql - 如何将sql查询转换为linq

C++ 全局变量声明

mysql - 将实时数据库复制到开发服务器

php_network_getaddress 错误

mysql - 查看[时间长度]是否可用于多行预订的最佳方法是什么?

sql - ROW_NUMBER 条查询数据是否需要获取整个结果集?

MySQL 基于不同表和 sum() 从表列中选择值

php:在数组中查找变量字符

python - 如何在 Python 中通过字符串访问类变量?