2015-04-17 108 views
0

我想创建一个查询,将结果排序在两个日期之间。 这在switch语句的手中。但这似乎并不奏效。MySQL SWITCH CASE多重排序

下面的简化版本(没有指定字段)

SELECT * 
FROM `system_booking` 
JOIN `system_address`  ON `system_address`.`address_id` = `system_booking`.`booking_address` 
JOIN `system_bookingprice` ON `system_booking`.`booking_id` = `system_bookingprice`.`bookingprice_link` 
JOIN `system_vehicle`  ON `system_vehicle`.`vehicle_id` = `system_booking`.`booking_vehicle` 
JOIN `system_parkingfee` ON `system_booking`.`booking_id` = `system_parkingfee`.`parkingfee_link` 
WHERE (`booking_start` LIKE ? OR `booking_end` LIKE ?) 
ORDER BY (
    CASE WHEN `booking_start` LIKE ? THEN `booking_start` ASC 
    CASE WHEN `booking_end` LIKE ? THEN `booking_end`  ASC 
END) 

然而这产生一个MySQL错误。

您的SQL语法错误;检查对应于你的MySQL服务器版本使用近“ASC CASE WHEN booking_end LIKE‘2015年6月1日%’,那么booking_end A”第9行

我希望有人能告诉我正确的语法手册我做错了什么。

+0

'ASC'当然在'CASE'语句中没有地方......它需要在_after_之后。 – CBroe

回答

2

你需要为每一个CASEEND(和一个逗号太):

ORDER BY (CASE WHEN `booking_start` LIKE ? THEN `booking_start` END) ASC, 
     (CASE WHEN `booking_end` LIKE ? THEN `booking_end` END) ASC 
0

@Gordon Linoff

那工作!

SELECT * 
FROM `system_booking` 
JOIN `system_address`  ON `system_address`.`address_id` = `system_booking`.`booking_address` 
JOIN `system_bookingprice` ON `system_booking`.`booking_id` = `system_bookingprice`.`bookingprice_link` 
JOIN `system_vehicle`  ON `system_vehicle`.`vehicle_id` = `system_booking`.`booking_vehicle` 
JOIN `system_parkingfee` ON `system_booking`.`booking_id` = `system_parkingfee`.`parkingfee_link` 
WHERE (`booking_start` LIKE ? OR `booking_end` LIKE ?) 
ORDER BY 
    (CASE WHEN `booking_start` LIKE ? THEN `booking_start` END) ASC, 
    (CASE WHEN `booking_end` LIKE ? THEN `booking_end`  END) ASC 

谢谢!