तुम सही कह रही हो। बिना किसी कारण के मैं थाह ले सकता हूं, 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;