2012-05-30 2 views
2

Я вынимаю записи из своей базы данных mysql с помощью php и хочу заказать их по полю базы данных, называемому expdate.Mysql сортировать по дате не работает должным образом

Даты напоминаний хранятся в таблице в этом формате 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> 

Проблема заключается в том, что столбцы упорядочены довольно случайным образом, он выводит запись и сортирует их по этой дате заказ:

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

Спасибо!thats perfect :-) –

+4

@Iain Simpson: на самом деле это не идеальный вариант, это просто временное решение, пока вы не перепишете его надлежащим образом. – 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

Хорошо, что это хорошо упорядочено, я могу подтвердить, что 12-го июля 2008 года предшествует 12 мая 2017 года, что также происходит до 13 мая 2017 года ...

Вы должны указать конкретный формат для выбранной даты я думаю

  • expdate является VARCHAR: Как и другие члены сказали, использовать STR_TO_DATE (expdate, «% d /% m /% Y ')
  • expdate - DATE: используйте 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. Это должно решить вашу проблему.

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