Mysql按日期排序不按预期工作

Iai*_*son 2 php mysql sql-order-by

我使用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>
Run Code Online (Sandbox Code Playgroud)

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

08-07-12
17-05-12
17-05-13
Run Code Online (Sandbox Code Playgroud)

Rap*_*aus 6

尝试

order by STR_TO_DATE(expdate, '%d-%m-%y')
Run Code Online (Sandbox Code Playgroud)

(并且下次使用实际日期格式...用于日期数据;))

  • @Iain Simpson:实际上它并不完美,它只是一个临时解决方案,直到你以适当的方式重写它 (4认同)
  • @IainSimpson:最好的办法是使用这个函数来填充数据库的新"RealExpDate"字段;) (2认同)