【问题标题】:Display MySQL results by date按日期显示 MySQL 结果
【发布时间】:2012-11-06 16:46:38
【问题描述】:

我有这个mysql表:

+--------------------+---------+-------+
|      date          | query   | count |
|--------------------+---------+-------|
|2012-11-18 09:52:00 | Michael |   1   |
|2012-11-18 10:47:10 |  Tom    |   2   |
|2012-11-17 15:02:12 |  John   |   1   |
|2012-11-17 22:52:10 |  Erik   |   3   |
|2012-11-16 09:42:01 |  Larry  |   1   |
|2012-11-16 07:41:33 |  Kate   |   1   |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

等等。我可以通过以下代码简单地获取结果并按日期在一行中排序:

$queries = mysql_query("SELECT * FROM my_tables ORDER BY date DESC LIMIT 20"); 
while($row = mysql_fetch_array($queries)){
    echo "Name ".$row['query']."";
}

但是如何显示按特定日期排序的表格中的元素,如下所示:

In 2012-11-18:
Michael
Tom

In 2012-11-17:
John
Erik

In 2012-11-16:
Larry
Kate

等等。谢谢!

【问题讨论】:

  • 这会给你一个开始:stackoverflow.com/questions/7357073/…
  • 大多数答案都与 sql 相关,但您没有指出有 php 相关的答案。因此,您的问题不清楚并且具有误导性。因此,否决他们的答案是不公平的。请编辑您的问题,确保您会在脑海中得到问题的答案
  • 你只需要一个Control break
  • 不要被这里所有与 mysql 相关的东西弄糊涂了。这只是一个纯粹的 php 问题
  • 只是为了好玩的 SQL 解决方案(省略不清楚的 LIMIT 内容:)here

标签: php mysql date row sql-order-by


【解决方案1】:

+1 好问题,这个问题不仅仅是如何订购查询!

我认为这可以使用GROUP_CONCAT function 来完成。当您将它们分组并用逗号分隔它们时,这将组合匹配结果。一旦你有了结果,你就可以爆炸或做任何你想做的事

http://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php

您必须按日期转换和分组,然后 group_concat 名称。然后(在 php 或 whathaveyou 中)用逗号分解名称,并回显日期后跟每个结果的名称。

edit 看起来您想要一种 PHP 方法来解决这个问题?哎呀

【讨论】:

  • 如果一条记录在查询字段中有一个“,”并且您被该分隔符分解会发生什么?
【解决方案2】:

这是 PHP 代码:

$query = mysql_query("SELECT date, query FROM table6 ORDER BY date DESC LIMIT 20");
$group_date = null;
while ($row = mysql_fetch_assoc($query)) {
    if ($group_date !== substr($row["date"], 0, 10)) {
        $group_date = substr($row["date"], 0, 10);
        echo "<h1>$group_date</h1>\n";
    }
    echo "${row['query']}<br>\n";
}

输出:

2012-11-18

汤姆

迈克尔

2012-11-17

埃里克

约翰

2012-11-16

拉里

凯特

请注意,虽然此代码按一列“分组”行,但它可以轻松扩展为按多列分组行。留作练习。

【讨论】:

    【解决方案3】:

    怎么样

     SELECT * FROM my_tables GROUP BY YEAR(date), MONTH(date), DAY(date) ORDER BY date DESC LIMIT 20
    

    【讨论】:

    • 同样的问题:汤姆、埃里克和凯特去哪儿了?
    【解决方案4】:

    试试 WHERE 语句:

       select * from my_table where date_column > "2012-11-18 00:00:00" and date_column < "2012-11-18 23:59:59" order by date_column
    

    【讨论】:

      【解决方案5】:

      使用这个:

      SELECT * FROM my_tables WHERE date > "2012-11-16" ORDER BY date LIMIT 4
      

      【讨论】:

      • 如果你能解释为什么它会起作用,你的答案会好得多。思考为什么也可以帮助您解决代码中的错误。
      猜你喜欢
      • 2015-11-20
      • 2011-10-07
      • 2014-03-23
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      相关资源
      最近更新 更多