订购带时间戳的记录

时间:2012-01-13 12:03:33

标签: php mysql database

我在这里有一个棘手的问题。

我在表中有很多结果,这个表有id,market,date和points。

我想获得给定月份的所有记录,然后按顺序输出每天的所有积分。

我不确定最好的方法吗?她是我的选择,我的想法,我可以设置一个循环,将在给定月份的每一天执行,这将运行查询以查找当天的每个记录,并将在每月的每一天执行此操作,这将然后很容易订购格式的记录,但我认为多次查询数据库不是一个好主意。

第二个想法是我在数据库中查询该日期的所有记录,按日期排序。但是,当我输出每天的信息时,我可以看到这里出现问题,那么我认为这将是一个漫长的工作。

有什么想法吗?有人之前做过这样的事情,可以伸出援助之手吗?任何建议都会受到欢迎!

感谢。

while($row = mysql_fetch_array($getresults))
{
    $day = FALSE;

    foreach ($row as $row)
    {
        $day_res = date("Y-m-d H:m:s", strtotime($row["date"]));

        if (!$day || $day != $day_res)
        {
            $day = $day_res;
            echo '<h1>'.$day.'</h1>';
        }

        echo $row['date'] . " " . $row["id"] . ": " . $row["market"] . 
                    "/" . $row["points"] . "<br/>";
    }
 }

这是我得到的输出:

1970-01-01 00:01:00

3 3: 3/3
3 3: 3/3
2012-01-13 09:01:06

E E: E/E
E E: E/E
1970-01-01 00:01:00

2 2: 2/2
2 2: 2/2
- -: -/-
- -: -/-
1970-01-01 00:01:00

4 4: 4/4
4 4: 4/4

并且或多或少会重复一段时间。

再次感谢。

2 个答案:

答案 0 :(得分:3)

如果该日期只是一个日期,那么您可以尝试这样的事情:

SELECT t.date, SUM(t.points) FROM table t WHERE date BETWEEN [STARTDATE HERE] AND [ENDDATE HERE] GROUP BY t.date

它做什么?它选择了日期和时间的所有内容。那天的积分总和,因为我们根据一天对所有结果进行分组。因此,对于表格中的每个唯一日期,您将得到一行结果。使用WHERE日期语句来定义您需要从哪个月进行选择。

添加:显示的内容仅在日期格式为:YYYY-MM-DD时才有效。如果您有时间戳(YYYY-MM-DD HH:ii:ss),您可以尝试将查询更改为:

SELECT t.date, SUM(t.points) FROM table t WHERE date BETWEEN [STARTDATE HERE] AND [ENDDATE HERE] GROUP BY DAYOFMONTH(t.date)

这可确保您根据表格中的日期将其按月份(1到31)分组。

答案 1 :(得分:1)

首先查询按日期排序的给定月份的所有内容:

SELECT * FROM `table` WHERE `date` LIKE '2012-01%' ORDER BY date;

这里显示的是php循环:

$day = FALSE;
foreach ($results as $result){
    $day_res = date("d", strtotime($result["date"]));
    if (!$day || $day != $day_res){
        $day = $day_res;
        echo '<h1>'.$day.'</h1>';
    }
    echo $result["id"].": ".$result["market"]."/".$result["points"]."<br/>";
}

这里的结构好了:

$day = FALSE;
while($row = mysql_fetch_array($getresults))
{
        $day_res = date("Y-m-d H:m:s", strtotime($row["date"]));

        if (!$day || $day != $day_res)
        {
            $day = $day_res;
            echo '<h1>'.$day.'</h1>';
        }

        echo $row['date'] . " " . $row["id"] . ": " . $row["market"] . 
                    "/" . $row["points"] . "<br/>";
 }