sql >> Databáze >  >> RDS >> Mysql

Řazení Null jako poslední

Máš pravdu. Bez důvodu, který mohu pochopit, MySQL přijímá nejednoznačné ORDER BY pokud s vámi zadaným jménem nebude nijak nakládáno (v žádném případě by mě nenapadlo. Možná existují i ​​jiné).

Jakmile je, dvojznačnost je odmítnuta.

Toto je akceptováno (a nadbytečné):

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

zatímco COALESCE(name, '') , name IS NULL , name OR NULL jsou všechny zamítnuty.

Zřejmým řešením je použít pro alias jiný název, který se nevyskytuje v žádné tabulce.

Další možností by bylo vytvořit vnořený dotaz:

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

To je:

$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. Nedefinovaná konstanta třídy 'MYSQL_ATTR_INIT_COMMAND' v nedefinované konstantě třídy (PHP 5.5.3)

  2. MySQL Uspořádat podle sloupce =x, sloupec vzestupně?

  3. PHP:Volání uložené procedury MySQL s parametry INPUT I OUTPUT (NOT INOUT)

  4. Android- Musím zkontrolovat, zda tabulka existuje v SqliteHelper.onCreate()?