mysql按日期排序无法正常工作

y3bcpkx1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(350)

我有这样的php代码:

<?php
    session_start();
    include("../Php/ConfigBaza.php");

    $kid = $_SESSION['KORISNIKID'];

    $sql = "SELECT REZERVACIJAID, DATE_FORMAT(DATUM, '%d.%m.%y') AS DATUM, 
                    STATUS, VREDNOST 
            FROM REZERVACIJE 
            WHERE KORISNIKID = '$kid' 
            ORDER BY DATUM DESC";
    $result = $mysqli->query($sql);

    if($result->num_rows < 1) {
        echo("Nemate ni jednu rezervaciju!");
        die();
    } else {
        echo("<style>");
        include('../Styles/_Rezervacije.css');
        echo("</style>");
        while($r = mysqli_fetch_assoc($result)) {
            $realizovana = "";
            $rid = $r['REZERVACIJAID'];
            $h_rid = hash('fnv1a32', $rid);
            $datum = $r['DATUM'];
            $status = $r['STATUS'];
            $v = $r['VREDNOST'];

            $v_txt = number_format($v, 2);

            if($status == 2) {
                $realizovana = "realizovana";
            } else if($status == 0) {
                $realizovana = "neaktivna";
            }
            echo("
                <div class='rezervacija $realizovana' id='$rid' onclick='IdiNaRezervaciju(this.id)'>
                    <p style='font-weight: bolder; font-size: large'>$h_rid</p>
                    <br>
                    <p style='font-size: large'>$v_txt</p>
                    <p style='font-weight: bolder'>$datum</p>
                </div>
            ");
        }
    }
?>

正如您在查询中看到的,我是按日期排序的,但由于某些原因,它在几天内是正常的,而不是几个月。
我得到的结果是:

在mysql数据库中,我的日期列是日期类型

jtoj6r0c

jtoj6r0c1#

正如@riggsfully在他的评论中出色地提到的,问题是您正在重新格式化用于排序记录的日期列。
当您重新格式化日期列时,mysql将不再将其作为日期字段读取,而是作为文本读取, 04.08.18 低于 31.08.18 这就是为什么你得到你现在得到的订单。
解决方案是将日期列重新格式化为另一个名称:

DATE_FORMAT(DATUM, '%d.%m.%y') AS SOME_DATE,

你当然可以改变 SOME_DATE 无论你想要什么。然后在代码中,用 $r['SOME_DATE']; 相反。
这里有一把小提琴展示了不同之处:http://sqlfiddle.com/#!9/0d2e5f/1号楼

相关问题