Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sortowanie wartości null na końcu

Masz rację. Bez powodu, który mógłbym pojąć, MySQL akceptuje niejednoznaczny ORDER BY tak długo, jak podana nazwa nie jest w żaden sposób obsługiwana (nie mogłem sobie wyobrazić. Może istnieją inne).

Gdy tylko jest, dwuznaczność zostaje odrzucona.

Jest to akceptowane (i zbędne):

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

while COALESCE(name, '') , name IS NULL , name OR NULL wszystkie są odrzucane.

Oczywistym rozwiązaniem jest użycie innej nazwy dla aliasu, takiej, która nie pojawia się w żadnej tabeli.

Inną możliwością byłoby utworzenie zagnieżdżonego zapytania:

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

To znaczy:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL/SQL pobiera pierwsze 40 znaków pola tekstowego?

  2. MySQL Uzupełnij brakujące daty między dwiema datami dla danego statusu

  3. Jak usunąć domyślną wartość kolumny w MySQL?

  4. Formatuj numer daty z bazy danych

  5. MySQL wybierz, gdzie kolumna nie jest pusta