Странное поведение в запросе тройного подвыбора со столбцом stati c в Laravel 5.8 после обновления до MySQL 5.7 - PullRequest
0 голосов
/ 31 марта 2020

Я просто хотел узнать, может ли кто-нибудь помочь мне с этой проблемой, которую я нашел в своем коде Laravel 5.8 сегодня.

Я обновил до MySQL 5.7 с 5.6, и после этого следующий запрос выиграл больше не работает:

SELECT * FROM (
          SELECT * FROM (
            SELECT
              h.`ID`,
              ttt.`priority`,
              CASE
                WHEN tr.rank = 0 THEN 1000 ELSE tr.rank
              END AS rank
            FROM horse_user hu
            INNER JOIN horse                   h   ON h.ID          = hu.hID
            LEFT JOIN `tournament_horse`       th  ON th.`horse_id` = hu.`hID`
            LEFT JOIN `tournament_result`      tr  ON tr.`horse_id` = th.`id`
            LEFT JOIN `tournament_trial`       tt  ON tt.id         = tr.trial_id     AND tt.is_active = 1
            LEFT JOIN `tournament_trial_types` ttt ON ttt.`id`      = tt.`trial_type`
            WHERE
              hu.`pID`       = 1234  AND 
              hu.`type`      = 0 AND 
              hu.AccountType = 0  
          ) y
          ORDER BY 
            y.`priority` DESC,
            y.rank
        ) x
        GROUP BY
          x.ID
        ORDER BY
          x.priority DESC,
          x.rank,
          x.ID
        ;

Появилось следующее сообщение об ошибке:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'x.rank' in 'order clause' (SQL: SELECT * FROM ( SELECT * FROM ( SELECT h.`ID`, ttt.`priority`, CASE WHEN tr.rank = 0 THEN 1000 ELSE tr.rank END AS rank FROM horse_user hu INNER JOIN horse h ON h.ID = hu.hID LEFT JOIN `tournament_horse` th ON th.`horse_id` = hu.`hID` LEFT JOIN `tournament_result` tr ON tr.`horse_id` = th.`id` LEFT JOIN `tournament_trial` tt ON tt.id = tr.trial_id AND tt.is_active = 1 LEFT JOIN `tournament_trial_types` ttt ON ttt.`id` = tt.`trial_type` WHERE hu.`pID` = :user_id AND hu.`type` = :user_type AND hu.AccountType = 0 ) y ORDER BY y.`priority` DESC, y.rank ) x GROUP BY x.ID ORDER BY x.priority DESC, x.rank, x.ID ; )

Есть ли у кого-нибудь какие-либо предложения о том, как решить эту проблему?

Я узнал, что ДЕЛО КОГДА - проблема. После замены его на реальный столбец tr.rank все заработало. Но мне нужен СЛУЧАЙ, КОГДА ....

С Navicat проблема не существует, только моя установка Laravel вызывает эту ошибку.

Я надеюсь, что вы мне поможете!

Привет

Даниил

...