【发布时间】:2014-08-23 02:12:13
【问题描述】:
好的,这是我的问题:
SELECT NAME,
DATE_FORMAT(DATE_WRITTEN, "%c/%e/%y") AS written_date,
DATE_FORMAT(RETURN_DATE, "%c/%e/%y") AS return_date
FROM `pfp`.`returns` AS `Re`
LEFT JOIN `pfp`.`insurance` AS `Insurance`
ON ( `insurance`.`id` = `Re`.`INSURANCE_ID` )
LEFT JOIN `pfp`.`remain` AS `Remain`
ON ( `remain`.`id` = `Re`.`REMAIN_ID` )
LEFT JOIN `pfp`.`formula` AS `Formula`
ON ( `formula`.`id` = `remain`.`FORMULA_ID` )
WHERE `NOT_RETURNED` = 'F'
AND `RETURN_DATE` BETWEEN '2014-01-01' AND '2014-08-22'
ORDER BY `RETURN_DATE` DESC
LIMIT 100
问题是它按日期 14-8-9 排序到 14-8-7 然后跳回到 14-8-22 并从那里向下...为什么??
【问题讨论】:
-
因为您的日期被转换为字符串。这就是字符串的排序方式。
-
这是一个超级低效的查询。正如 Siyual 提到的,您需要对基列进行排序,而不是格式化字符串。