在mysql中按日期排序

时间:2009-08-15 10:11:09

标签: php sql mysql

我想按日期对结果形式mysql进行排序。我使用这样的查询:

<?php
$date = $db->get_query("select distinct created_date from comments");
$condate = '';
for($i=0; $i < count($date); $i++)
{
  $condate = $date[$i]['created_date'];
  $data = $db->get_query("select id,created_date from comments where created_date='$condate' order by created_date");
  ?>
  <table border='1' style="float: left; margin-left: 5px;">
    <?php
    for($j=0; $j<count($data); $j++)
    {
      echo '<tr><td>';
      echo $data[$j]['id'] ;
      echo '</td><td>';
      echo $data[$j]['created_date'];
      echo '</td></tr>';
    }
    ?>
  </table>
<?php
}
?>

此查询产生如下结果:

2009-07-10 
2009-07-10
2009-08-21
2009-07-29
2009-08-15

结果未排序 我希望看到结果是:

2009-07-10
2009-07-10
2009-07-29
2009-08-15
2009-08-29

按创建日期分隔表格顺序。
我想知道mysql结果中的排序日期。在这种情况下,$condate是验证条件的变量。$condate的值在comments表中都是created_date。我在循环中生成它并设置值为。
请帮帮我!

5 个答案:

答案 0 :(得分:2)

如果您只选择单个日期的结果,则无需排序。 WHERE条件究竟在做什么?

编辑:既然您已经发布了代码,我可以提供一个建议。您的原始代码针对每个不同的日期运行单独的查询。你真正想要的是一个单一的查询,它返回所有日期的结果,但是按照特定的顺序,这是下面代码中的查询。试试这个:

<?php     

    $data = $db->get_query("select id,created_date from comments order by created_date");
?>
<table border='1' style="float: left; margin-left: 5px;">
   <?php


        for($j=0; $j<count($data); $j++)
        {

             echo '<tr><td>';
             echo $data[$j]['id'] ;
             echo '</td><td>';
             echo $data[$j]['created_date'];
             echo '</td></tr>';
        }

   ?>
</table>

请注意,您已经在原始代码中拥有了所有这些内容!你只是设法说服自己,任务比实际更复杂。 :)

答案 1 :(得分:0)

因为你将 = 放在where子句中,所以所有记录都在同一天,排序将没有用。

修改

您是否对created_date字段或字符串使用日期字段类型?如果它是字符串,那么可能会导致你的问题......

答案 2 :(得分:0)

也许您的日期字段存储为“字符串”而不是像datetime一样?

如果您查看:

describe table_name;

您的日期如何存储?

答案 3 :(得分:0)

您正在循环浏览未按顺序生成第二个查询中要求的日期的结果。你正在查询顶部附近:

$date = $db->get_query("select distinct created_date from comments");
// should be (and excuse the keyword capitalization, I just think its easier to read)
$date = $db->get_query("SELECT DISTINCT created_date FROM comments ORDER BY created_date");

您只需将ORDER BY子句放在错误的查询上。

答案 4 :(得分:0)

我认为你不需要执行2个查询。 尝试执行 $ data = $ db-&gt; get_query(“选择DISTINCT id,created_date from comments where created_date ='$ condate'order by created_date”); 我认为你的代码中已经内置了所有内容,但你只是感到困惑。

请告诉我这是否解决了您的问题。