1

这是我的表的代码:

<table border="black">
    <tr><th>Date</th><th>Newsletter ID</th></tr>


        <?php
        while ($row = oci_fetch_array($stid)):
        echo "<tr><td>" . htmlentities($row["DATE_ENG"]) . "</td>";
        echo "<td>" . htmlentities($row["FEATURE_TITLE_ENG"]) . "</td>";
        $NewsIDN = $row["NEWS_IDN"];
        ?>
        <td>
        <form name="editEmail" action="editEmail.php" method="GET">
            <input type="hidden" name="EmailID" value="<?php echo $NewsIDN; ?>"/>

            <input type="hidden" name="action" value="e"> 
            <input type="submit" name="editEmail" value="Edit"/>
        </form>
    </td>
    <td>
        <form name="deleteEmail" action="deleteEmail.php" method="POST">
            <input type="hidden" name="newsIDN" value="<?php echo $NewsIDN; ?>"/>
            <input type="submit" name="deleteEmail" value="Delete" action="deleteEmail.php" onclick="return confirm('Are you sure want to delete')"/>
        </form>



    </td>

这是正在接收数据的查询。我如何使它在正确的日期之前从上到下订购表格,以便 2013 年 1 月在 2013 年 5 月之前?

public function get_Newsletters() {
$query = "SELECT         NEWS_IDN,DATE_ENG,DATE_FRA,FEATURE_TITLE_ENG,FEATURE_TITLE_FRA,FEATURE_DESC_ENG,FEATURE_DESC_FRA,FEATURE_IMG_URL_ENG,FEATURE_IMG_URL_FRA,FEATURE_IMG_ALT_ENG,FEATURE_IMG_ALT_FRA,FEATURE_URL_ENG,FEATURE_URL_FRA,LAST_MODIFIED_BY,LAST_MODIFIED_DT,PUBLISHED_IND FROM BETS.TB__BETS_NEWSLETTERS ORDER BY DATE_ENG";
$stid = oci_parse($this->con, $query);
oci_execute($stid);
return $stid;
}

所以表正在调用上面的查询,现在我只是在做 ORBEDER BY DATE_ENG

4

3 回答 3

0

MySQL 的默认排序顺序是 ASC,这意味着行从最低到最高排序,在日期值中,这变成了从早到晚的时间。

您正在使用“按 DATE_ENG ASC 排序”,这会将日期从小到大排序。你想要的应该通过它来完成。

如果是相反的方式,请尝试“order by DATE_ENG DESC”

如果您的 DATE_ENG 是 varchar 类型,则排序是按字母顺序进行的,并且取决于您的日期格式,可能与您想要的不同。

最好的用法是,对于日期字段总是使用 unix TIMESTAMP 或 DATETIME,然后使用“order by”语句总是会给你正确的结果。

这种方法的优点是几乎每种语言都有默认处理 unix TIMESTAMP 和 mysql DATETIME 格式的工具。

于 2013-06-20T13:38:41.173 回答
0

DATE_ENG应该是一个DATEDATETIME数据类型。没有它,它就无法准确排序。一旦你改变了它,你就可以使用now(). 然后,您可以通过ORDER BY DATE_ENGORDER BY DATE_ENG DESC

查看有关数据类型的更多信息。datetime

于 2013-06-20T13:40:34.670 回答
0

如果您的格式不同,则如果order by以这种格式存储在列中的日期然后在函数m/d/Y中使用该特定日期格式,则会出现这种情况STR_TO_DATE

SELECT NEWS_IDN,DATE_ENG,DATE_FRA,FEATURE_TITLE_ENG,FEATURE_TITLE_FRA,
FEATURE_DESC_ENG,FEATURE_DESC_FRA,FEATURE_IMG_URL_ENG,FEATURE_IMG_URL_FRA,
FEATURE_IMG_ALT_ENG,FEATURE_IMG_ALT_FRA,FEATURE_URL_ENG,FEATURE_URL_FRA,
LAST_MODIFIED_BY,LAST_MODIFIED_DT,PUBLISHED_IND FROM BETS.TB__BETS_NEWSLETTERS
ORDER BY STR_TO_DATE(DATE_ENG, '%m/%d/%Y') ASC

这是某些列的sql fiddle,但即使您的列类型不是日期,它也会向您展示它是如何工作的

于 2013-06-20T13:41:29.143 回答