2012-05-30 90 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中正確地存儲重新排列的日期。這應該可以解決你的問題。