Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sortieren von Nullen zuletzt

Sie haben Recht. Ohne Grund, den ich ergründen kann, akzeptiert MySQL ein zweideutiges ORDER BY solange der von Ihnen angegebene Name in keiner Weise behandelt wird (Keine Möglichkeit, die ich mir vorstellen könnte. Vielleicht gibt es noch andere).

Sobald dies der Fall ist, wird Mehrdeutigkeit abgelehnt.

Dies ist akzeptiert (und überflüssig):

select b.id, a.name as name
    FROM client AS a JOIN client AS b ON (a.id = b.id)
    ORDER BY name, name;

während COALESCE(name, '') , name IS NULL , name OR NULL werden alle abgelehnt.

Die offensichtliche Lösung besteht darin, einen anderen Namen für den Alias ​​zu verwenden, einen, der in keiner der Tabellen erscheint.

Eine andere Möglichkeit wäre, eine verschachtelte Abfrage zu erstellen:

SELECT * FROM ( your query here, without ORDER ) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;

Das heißt:

$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;