1

我正在尝试使用 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按预期排序?

4

2 回答 2

2

您的表中已经有一个可爱的日期列 - 为什么要尝试基于该格式的字符串进行排序?

    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
于 2014-06-13T10:09:02.903 回答
1

尝试这个

$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
"; 
于 2014-06-13T10:09:15.690 回答