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

確かに、ユーザーへの日付出力を好きなようにフォーマットします-しかし、データの各行をフォーマットし、データベースが本来の方法でネイティブに実行できるものでソートすることにより、DBにさらに多くのことをさせるだけではありません.

編集:興味深い。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 に答える