2012-05-30 58 views
2

我拉出我的MySQL数据库使用PHP记录,并希望通过名为expdate的数据库字段命令它们。Mysql按日期排序不按预期工作

提醒的日期以格式17-04-12 as 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 
+5

为什么不以任何适当的格式存储日期? – zerkms

+0

这是我的javascript datepicker如何输出日期挑选 –

+1

这看起来对我来说很合适。毕竟它是订购字符。 – jeremyharris

回答

6

试试

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

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

+0

谢谢!多数民众赞成在完美:-) –

+4

@Iain辛普森:实际上它并不完美,这只是一个临时的解决方案,直到你以正确的方式重写它 – zerkms

+2

@IainSimpson:最好的事情是使用这个函数来填充新的“RealExpDate “你的数据库的字段;) –

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()); 
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')
0

试试这个

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

使用ASC =方兴未艾

使用DESC =后代

1

存储在MySQL中的适当日期格式的日期。最好重新排列datepicker生成的格式,然后在MySQL中正确地存储重新排列的日期。这应该可以解决你的问题。