小编dav*_*ind的帖子

最后排序Nulls

想要最后对Nulls和Blanks进行排序,并阅读所有使用Coalesce函数或If by order by列的解决方案.

我的问题对我来说不起作用,因为我正在排序的列是由创建查询的PHP脚本动态指定的,而我的一些列在我的连接中的两个表中.

   $sortcol="boat";
   $sql= "SELECT fleet,b.boat as boat,owner FROM boats as b 
   LEFT JOIN owners as o ON  b.boat=o.boat 
   ORDER BY $sortcol";
Run Code Online (Sandbox Code Playgroud)

这很好用,我可以更改变量$ sortcol,我的输出列表工作得很好,除了空值和空格位于顶部.

基于其他帖子,我尝试了这个

   $sortcol="boat";
   $sql= "SELECT fleet,b.boat as boat,owner FROM boats as b 
   LEFT JOIN owners as o ON  b.boat=o.boat 
   ORDER BY IF($sortcol is NULL,1,0), $sortcol";
Run Code Online (Sandbox Code Playgroud)

这会引发错误"ORDER BY子句中的列船不明确".显然它需要b.boat按顺序,但由于我不会进入的原因是有问题的.看来,无论何时我尝试在orderby子句中使用函数,我都不能使用列别名.

任何想法优雅的解决方案?

mysql null sql-order-by

5
推荐指数
1
解决办法
284
查看次数

MYSQL查询慢 - 子查询和临时表

我有这个复杂的查询,在大约50ms内产生3744行.

 SELECT 
  srl.event_id as eid
 , srl.race_num as rnum
 , bts.boat_id as bid_id
 , srl.series_year as yr
 , srl.id as id 
 , IFNULL(rfi.fleet,fleet_def) as flt_old,flt_match,s.series_id as sid
 , s.series_year as syr
  ,IFNULL(ovr_pts,POINTS('4',IFNULL(ovr_place,place),num_start)) as points

 FROM

 (SELECT en1.boat_id,en1.boat_name,MAX(fleet) as fleet_def FROM entries en1 
 JOIN series_race_list srl1 ON srl1.event_id=en1.event_id 
              AND srl1.series_year=en1.race_year 
 LEFT JOIN entries_race er1 ON en1.boat_id= er1.boat_id 
                           AND srl1.event_id=en1.event_id      
                           AND srl1.series_year =en1.race_year 
 WHERE srl1.series_id ='3' AND srl1.series_year ='2012' 
                            AND en1.entry_deleted='N'      
 GROUP BY boat_id) bts 

 JOIN series_race_list srl LEFT JOIN series as …
Run Code Online (Sandbox Code Playgroud)

mysql subquery

5
推荐指数
1
解决办法
1864
查看次数

标签 统计

mysql ×2

null ×1

sql-order-by ×1

subquery ×1