Kamu benar. Tanpa alasan yang dapat saya pahami, MySQL menerima ORDER BY
yang ambigu selama nama yang Anda berikan tidak ditangani dengan cara apa pun (tidak mungkin saya pikirkan. Mungkin yang lain ada).
Segera setelah itu, ambiguitas ditolak.
Ini diterima (dan berlebihan):
select b.id, a.name as name
FROM client AS a JOIN client AS b ON (a.id = b.id)
ORDER BY name, name;
sementara COALESCE(name, '')
, name IS NULL
, name OR NULL
semuanya ditolak.
Solusi yang jelas adalah dengan menggunakan nama yang berbeda untuk alias, yang tidak muncul di kedua tabel.
Kemungkinan lain adalah membuat kueri bersarang:
SELECT * FROM ( your query here, without ORDER ) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;
Yaitu:
$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;