想要最后对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子句中使用函数,我都不能使用列别名.
任何想法优雅的解决方案?
我有这个复杂的查询,在大约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)