2013-06-20 2 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 года был до 2013 года?

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; 
} 

Так таблица вызова выше запрос и прямо сейчас я просто делаю ORBEDER BY DATE_ENG

+0

В каком формате хранится дата? – Jessica

+0

Каков тип столбца 'DATE_ENG' –

+0

. Дата - это просто строка, в которой фактическая информация может быть введена как любое слово, а также когда-либо. –

ответ

0

порядок сортировки по умолчанию для MySQL является ASC, то есть строки упорядочены от низшего к высшему, в дату Это значение начинается с раннего времени до позднего времени.

Вы используете "заказ DATE_ENG ASC" и сортируете даты от маленького до большого. И то, что вы хотите, должно быть достигнуто этим.

Если это наоборот, пытаются «заказ DATE_ENG DESC»

Если DATE_ENG является тип VARCHAR, то сортировка производится alpebetically и в зависимости от формата даты Вашего, не может быть то, что вы хотел быть.

Наилучшее использование, поскольку поля даты всегда используют unix TIMESTAMP или DATETIME, тогда использование оператора «order by» всегда дает правильные результаты.

Преимущество этого подхода в том, что почти каждый язык имеет инструменты для работы с unix TIMESTAMPs и форматами mysql DATETIME по умолчанию.

+0

Я сделал ASC, но это делает 31 декабря 1999 года до 12 мая 2012 года ..? –

+0

ASC по умолчанию, если ваш тип столбца mysql - DATETIME, затем используйте DESC, что делает более поздние даты первыми. И я обновил свой ответ, и чтение его снова может помочь. –

+0

oh, поэтому мне нужно изменить тип столбца в моей БД до DATETIME? –

0

DATE_ENG должно быть DATE или DATETIME тип данных. Без этого он не может быть точно отсортирован. Как только вы измените это значение, вы сможете вставить дату в базу данных, используя now(). Затем вы можете правильно заказать ORDER BY DATE_ENG или ORDER BY DATE_ENG DESC

Отметьте more information по типам данных datetime.

+0

oh okay yeah это просто строковый тип данных, а не дата или что-то еще, что является моей проблемой –

+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

Смежные вопросы