Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql按日期排序未按预期工作_Php_Mysql_Sql Order By - Fatal编程技术网

Php Mysql按日期排序未按预期工作

Php Mysql按日期排序未按预期工作,php,mysql,sql-order-by,Php,Mysql,Sql Order By,我使用php从mysql数据库中提取记录,并希望通过名为expdate的数据库字段对它们进行排序 提醒的日期以17-04-12格式作为varchar存储在表中 我使用以下代码将所有记录提取出来,并按expdate列对它们进行排序 <table border="0" style="text-align:left;"> <tr style="text-align:left;"> <th style="text-align:left;"

我使用php从mysql数据库中提取记录,并希望通过名为expdate的数据库字段对它们进行排序

提醒的日期以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>

需要使用数据转换:

$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());
试一试


(下次使用实时日期格式…用于日期数据;)

这是有序的,我可以确认2008年7月12日在2017年5月12日之前,也在2017年5月13日之前

我想你必须为你选择的日期指定一种特定的格式

  • expdate是一个VARCHAR:正如其他成员所说,使用STR_TO_DATE(expdate,“%d/%m/%Y”)
  • expdate是日期:使用日期格式(expdate,“%d/%m/%Y”)
试试这个

$result = mysql_query("SELECT * FROM ymeg_chronoforms_data_NewsletterSubscribe ORDER BY expdate DESC")or die(mysql_error());
使用ASC=上升


使用DESC=subgent将日期以正确的日期格式存储在MySQL中。最好重新排列datepicker生成的格式,然后将重新排列的日期正确地存储在MySQL中。这应该可以解决您的问题。

为什么不以任何适当的格式存储日期?这就是我的javascript日期选择器在选择日期时输出我认为合适的日期的方式。毕竟,这是在排序字符。看在佛陀的份上,停止将日期存储为varchar,多个特定于日期的字段类型有什么问题。我真的希望你能以它为例。你有HTML+CSS+PHP+SQL。。您只缺少了完美的意大利面风暴的JavaScriptcode@Iain辛普森:事实上它并不完美,它只是一个临时的解决方案,直到你用一个合适的方式重写它way@IainSimpson:最好使用此函数填充数据库的新“RealExpDate”字段;)
order by STR_TO_DATE(expdate, '%d-%m-%y')
$result = mysql_query("SELECT * FROM ymeg_chronoforms_data_NewsletterSubscribe ORDER BY expdate DESC")or die(mysql_error());