Прав си. Без причина, която мога да разбера, MySQL приема двусмислен ORDER BY
стига името, което предоставяте, да не се обработва по никакъв начин (няма начин да се сетя. Може би съществуват други).
Веднага щом стане, двусмислеността се отхвърля.
Това е прието (и излишно):
select b.id, a.name as name
FROM client AS a JOIN client AS b ON (a.id = b.id)
ORDER BY name, name;
докато COALESCE(name, '')
, name IS NULL
, name OR NULL
всички са отхвърлени.
Очевидното решение е да използвате различно име за псевдонима, което не се появява в нито една таблица.
Друга възможност би била да се създаде вложена заявка:
SELECT * FROM ( your query here, without ORDER ) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;
Това е:
$sortcol="boat";
$sql = <<<SQL
SELECT * FROM (
SELECT fleet,b.boat as boat,owner FROM boats as b
LEFT JOIN owners as o ON b.boat=o.boat
) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;
SQL;