[英]MySQL - ORDER BY STR_TO_DATE not working
我試圖用PHP和MySql運行PDO查詢,然后按日期對它進行排序。
我的查詢如下:
$query_params = array(
':website' => $site
);
$query = "
SELECT
DATE_FORMAT(date, '%d/%m/%Y') AS date,
id
FROM
items as bi
INNER JOIN
basket as bb ON bi.item_number=bb.basket_item
INNER JOIN
orders as bo ON bb.basket_order=bo.order_number
WHERE
bi.website = :website
ORDER BY
STR_TO_DATE(date,'%d/%m/%Y') DESC
";
try {
$stmt = DB::get()->prepare($query);
$stmt->execute($query_params);
$rows = $stmt->fetchAll();
}
catch(PDOException $ex) {}
foreach($rows as $row):
$output .= "".$row["date"].",";
$output .= "".$row["id"].",";
$output .= "\r\n <br />";
endforeach;
我的輸出應為:
13/06/2014, 8676,
12/06/2014, 5765,
12/04/2014, 7683,
08/12/2013, 1098,
06/12/2013, 2003,
06/12/2013, 6755,
它似乎沒有按任何東西排序:
12/06/2014, 5765,
12/04/2014, 7683,
13/06/2014, 8676,
06/12/2013, 2003,
06/12/2013, 6755,
08/12/2013, 1098,
STR_TO_DATE(date,'%d/%m/%Y') DESC
是否STR_TO_DATE(date,'%d/%m/%Y') DESC
預期排序?
您的表中已經有一個可愛的date列-為什么在地球上嘗試基於此格式的字符串進行排序?
SELECT
DATE_FORMAT(date, '%d/%m/%Y') AS date,
id
FROM
items as bi
INNER JOIN
basket as bb ON bi.item_number=bb.basket_item
INNER JOIN
orders as bo ON bb.basket_order=bo.order_number
WHERE
bi.website = :website
ORDER BY
date DESC
當然,您可以根據自己的喜好格式化輸出給用戶的日期-但是,您不僅要格式化數據庫的每一行,還需要格式化每一行數據,然后按照本來可以由數據庫本地完成的方式進行排序。
編輯:有趣。 我想知道date
是否是半保留字這一事實是否導致您的排序未按預期進行?
也許試試這個:
ORDER BY
bo.date DESC
嘗試這個
$query = "
SELECT
DATE_FORMAT(date, '%d/%m/%Y') AS date,
id
FROM
items as bi
INNER JOIN
basket as bb ON bi.item_number=bb.basket_item
INNER JOIN
orders as bo ON bb.basket_order=bo.order_number
WHERE
bi.website = :website
ORDER BY
date DESC
";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.