我想按日期对结果形式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。我在循环中生成它并设置值为。
请帮帮我!
答案 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”); 我认为你的代码中已经内置了所有内容,但你只是感到困惑。
请告诉我这是否解决了您的问题。