2013-06-20 26 views
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; 
} 

所以表調用由DATE_ENG上面的查詢而現在我只是做ORBEDER

+0

日期存儲的格式是什麼? – Jessica

+0

DATE_ENG列的類型 –

+0

日期只是一個字符串,它實際上可以作爲任何單詞whatso曾經輸入過 –

回答

0

的MySQL的默認排序順序是ASC,這意味着行從最低到最高排序,日期這個值從早期到晚期。

您正在使用「order by DATE_ENG ASC」,並將日期從小到大排序。而你想要的應該由此來完成。

如果是其他方式,嘗試「訂單由DATE_ENG DESC」

如果您DATE_ENG爲varchar類型,然後排序alpebetically完成,並根據您的日期格式,可能不會像你想成爲。

最好的用法是,對於日期字段總是使用unix TIMESTAMP或DATETIME,那麼使用「order by」語句總是會給你正確的結果。

這種方法的優點是幾乎所有的語言都有默認處理unix TIMESTAMP和mysql DATETIME格式的工具。

+0

我做了ASC,但它使得1999年12月31日在2012年5月12日之前到來。 –

+0

ASC是默認的,如果你的mysql列類型是DATETIME,那麼使用DESC,這使得更晚的日期成爲第一。我更新了答案,再讀一遍可能會有所幫助。 –

+0

哦,所以我需要chnage在我的數據庫的列類型到DATETIME? –

0

DATE_ENG應該是DATEDATETIME數據類型。沒有這一點,它不能準確分類。一旦改變了這一點,就可以使用now()將日期插入到數據庫中。您可以通過ORDER BY DATE_ENGORDER BY DATE_ENG DESCORDER BY DATE_ENG DESC

查看more informationdatetime數據類型。

+0

哦好吧是的,它只是一個字符串數據類型不是日期或任何是我的問題 –

+0

正是!它不應該是一個字符串。將其更改並解決問題。 – SeanWM

+0

幫助我得到了它的工作感謝 –

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一些列而是要說明即使列類型不是日期,它也是如何工作的

+0

嘿我做到了,但我沒有一個標識符STR_TO_DATE –

+0

它是一個mysql函數,如果你的列類型沒有日期,它會被視爲日期 –

+0

如果你很早在你的開發階段,我強烈建議你改變數據鍵入「DATE」或「DATETIME」。它可以幫助你避免大量問題。將日期存儲爲字符串是一種可怕的做法。 – SeanWM