我正在处理以下查询,您将找到示例数据 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 子句。
我尝试过以下方法:
添加
@id :=
到... cc6_mensleague_players.id AS id ...
开头和改变... WHERE player = 785 ...
至... WHERE player = @id ...
运气不好!更改
... player = 785 ORDER BY DATE ASC ...
至... player = @id GROUP BY ID ORDER BY DATE ASC ...
运气不好!我还尝试了一些其他策略,但我就是想不通。
所以我的问题是:
我该如何制作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/