Mysql - передать переменную в подзапрос из условия - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть следующий запрос, над которым я работаю, вы найдете примеры данных на этой скрипте БД :

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; 

Этот код отлично работает(спасибо Тобиасу Торнфельдту Ниссену), но сейчас я пытаюсь сделать динамический идентификатор игрока (785) ... Я не могу передать свою переменную id (cc6_MensLeague_players.id) в подзапрос из предложения.

Я пробовал следующие методы:

  1. Добавление @id := в начало ... cc6_mensleague_players.id AS id ... и изменение ... WHERE player = 785 ... на ... WHERE player = @id ... NO LUCK!

  2. Изменение ... player = 785 ORDER BY DATE ASC ... на ... player = @id GROUP BY ID ORDER BY DATE ASC ... БЕЗ УДАЧИ!

  3. Я также попробовал несколько других тактик, но я просто не могу понять это.

Итак, мой вопрос: как мне заставить WHERE player = cc6_mensleague_players.id (строка 9) работать?

Если вы укажете мне правильное направление, это будет с благодарностью.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Спасибо за ваши ответы: -)

Мне удалось найти решение.Без всех вас не обошлось бы.

Я закончил тем, что снял скобки, окружающие 2-й, из пункта

... FROM (SELECT * ... ) AS temp ...

и вуаля - переменная @id работает как шарм

Вот последний фрагмент кода

set @id=0, @count=0; select ( @rank := if(@points = points, @rank + 1, if(@points := points, @rank + 1, @rank + 1)) ) as rank, er.* from (select @id := cc6_MensLeague_players.id as id , ( 1288 ) as points, (select max(@count := if(outcome = 2, @count + 1, 0)) as MaxWins from cc6_MensLeague_rounds where player = @id order by date asc ) as maxcon from cc6_MensLeague_players group by id ) er cross join (select @rank := 0, @points := -1) params order by id desc;

https://www.db -fiddle.com / f / 35EQE2yzdxNs3KHZnQkMuQ / 6

Спасибо всем.

0 голосов
/ 17 февраля 2019

вы можете использовать псевдоним, который вы дали подзапросу как 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...