我有一个“可用”列,它返回“是”或例如“30分钟”。
为了对此表进行排序,我们发现这是按预期工作的,首先是“是”,然后是“30分钟”。
order by available + 0 asc
即使这有效,我们也不知道为什么我们必须将+0放到列中。有人可以详细说明吗?
编辑:这是一个关于查询的示例
请注意,所有where子句都不在这里,而if(x为null)是在没有结果aka null值时返回的东西。
select distinct r.rname, if(b.stime is null, 'Yes', 'Yes') as available, r.mperson
from Rooms r left outer join Bookings b using (rname)
union all
select b.rname, concat(minute(timediff(b.etime, '$sdate')), ' min') as available, r.mperson
from Bookings b inner join Rooms r using(rname)
order by available + 0 asc, rname asc
答案 0 :(得分:3)
您将available
值隐含地转换为数字,正如您可以通过尝试看到的那样
select "30 minutes" + 0; ==> returns 30
select "2 hours" + 0; ==> returns 2
select "yes" + 0; ==> returns 0
这会使"yes"
(或任何不以数字开头的字符串)成为第一个返回值,而不是最后一个。
更一般地说,您总是应该定义您的模式,以便拥有精确的非多态字段。