Я просто хотел узнать, может ли кто-нибудь помочь мне с этой проблемой, которую я нашел в своем коде 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 вызывает эту ошибку.
Я надеюсь, что вы мне поможете!
Привет
Даниил