あなたが正しい。私が理解できる理由はありませんが、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;