【问题标题】:Order by date in mysql在mysql中按日期排序
【发布时间】:2009-08-15 10:11:09
【问题描述】:

我想按日期对结果表单 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 的值都是 cmets 表中的 created_date。我在循环内产生这个并将值设置为。
请帮帮我!

【问题讨论】:

  • "where created_date='$condate'" - 您的查询中的 $condate 是什么?我猜是有原因的。

标签: php sql mysql


【解决方案1】:

如果您只选择单个日期的结果,则没有可排序的内容。 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>

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

【讨论】:

    【解决方案2】:

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

    编辑

    您是使用 date 字段类型作为 created_date 字段还是 string?如果它是字符串,那么可能会导致您的问题...

    【讨论】:

      【解决方案3】:

      也许您将日期字段存储为“字符串”而不是日期时间之类的东西?

      如果您检查:

      describe table_name;
      

      您的日期是如何存储的?

      【讨论】:

        【解决方案4】:

        您正在遍历未排序的结果以生成您在第二个查询中要求的日期。在您查询的顶部附近:

        $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 子句放在错误的查询上。

        【讨论】:

          【解决方案5】:

          我认为您不需要执行 2 个查询。 尝试执行 $data = $db->get_query("select DISTINCT id,created_date from cmets where created_date='$condate' order by created_date"); 我认为您的代码中已经内置了所有内容,但您只是有点困惑。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-11
            • 2018-09-10
            • 2012-12-03
            相关资源
            最近更新 更多