2

我正在使用 php 从我的 mysql 数据库中提取记录,并希望通过名为 expdate 的数据库字段对它们进行排序。

提醒的日期以 17-04-12 的格式作为 varchar 存储在表中。

我正在使用以下代码提取所有记录并按 expdate 列对其进行排序。

    <table border="0" style="text-align:left;">
      <tr style="text-align:left;">
        <th style="text-align:left;" width="200px"  scope="col">Name</th>
        <th style="text-align:left;" width="200px"  scope="col">Email</th>
      <th style="text-align:left;" width="200px" scope="col">Telephone</th>
      <th style="text-align:left;" width="200px" scope="col">Current Cover Expires</th>
      </tr>
    <?php
    $today = date("d-m-y");
    $result = mysql_query("SELECT * FROM ymeg_chronoforms_data_NewsletterSubscribe ORDER BY expdate")or die(mysql_error());

    echo '<tr style="text-align:left;">';
    while($row = mysql_fetch_array($result))
      {
        echo '<td style="text-align:left;">';  
      echo $row['name'];
      echo '</td>'; 
      echo '<td style="text-align:left;">'; 
      echo $row['email'];
         echo '</td>'; 
    echo '<td style="text-align:left;">'; 
      echo $row['tel'];
         echo '</td>'; 
     echo '<td style="text-align:left;">'; 
      echo $row['expdate'];
        echo '</td>'; 
      echo "</tr>";
      }

      ?>


    </table>

问题是,列的排序非常随机,它输出记录并按此日期顺序对它们进行排序:

08-07-12
17-05-12
17-05-13
4

5 回答 5

6

尝试

order by STR_TO_DATE(expdate, '%d-%m-%y')

(下次使用真正的日期格式......日期数据;))

于 2012-05-30T20:50:27.593 回答
1

在 MySQL 中以正确的日期格式存储日期。最好重新排列日期选择器生成的格式,然后将重新排列的日期正确存储在 MySQL 中。这应该可以解决您的问题。

于 2012-05-30T20:51:42.723 回答
0

需要使用数据转换:

$today  = date("d-m-y");
$result = mysql_query("SELECT * FROM ymeg_chronoforms_data_NewsletterSubscribe ORDER BY  STR_TO_DATE(expdate,'%d-%m-%Y')") or die(mysql_error());
于 2012-05-30T20:50:16.777 回答
0

好吧,这是很好的安排,我可以确认 2008 年 7 月 12 日在 2017 年 5 月 12 日之前,这也是在 2017 年 5 月 13 日之前......

我猜你必须为你选择的日期指定一个特定的格式

  • expdate 是一个 VARCHAR:就像其他成员所说,使用 STR_TO_DATE(expdate, '%d/%m/%Y')
  • expdate 是一个日期:使用 DATE_FORMAT(expdate, '%d/%m/%Y')
于 2012-05-30T20:50:35.013 回答
-1

尝试这个

$result = mysql_query("SELECT * FROM ymeg_chronoforms_data_NewsletterSubscribe ORDER BY expdate DESC")or die(mysql_error());

使用 ASC=上升

使用 DESC=后代

于 2012-05-30T20:50:53.020 回答