Máš pravdu. Bez důvodu, který mohu pochopit, MySQL přijímá nejednoznačné ORDER BY
pokud s vámi zadaným jménem nebude nijak nakládáno (v žádném případě by mě nenapadlo. Možná existují i jiné).
Jakmile je, dvojznačnost je odmítnuta.
Toto je akceptováno (a nadbytečné):
select b.id, a.name as name
FROM client AS a JOIN client AS b ON (a.id = b.id)
ORDER BY name, name;
zatímco COALESCE(name, '')
, name IS NULL
, name OR NULL
jsou všechny zamítnuty.
Zřejmým řešením je použít pro alias jiný název, který se nevyskytuje v žádné tabulce.
Další možností by bylo vytvořit vnořený dotaz:
SELECT * FROM ( your query here, without ORDER ) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;
To je:
$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;