2012-01-13 394 views
0

我在这里有一个棘手的问题。有时间戳的订购记录

我在表中有一些结果,这张表有ID,市场,日期和点数。

我想获取给定月份的所有记录,然后按顺序输出每一天的所有点。

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

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

任何想法?任何人以前做过这样的事情,可以伸出援助之手?任何建议将不只是欢迎!

谢谢。

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 

,并或多或少有一段重复。

再次感谢。

+0

“日期”是如何格式化的? Unix时间戳或类似2012-01-13? – TimWolla 2012-01-13 12:09:28

+0

这是一个时间戳 – ragebunny 2012-01-13 12:18:09

+0

再次检查我的答案;) – Abadon 2012-01-13 14:31:49

回答

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/>"; 
} 
+0

代码中的点没有求和。我想你应该像我在我的回答中所说的那样将其添加到查询中。使事情更简单。 – stefandoorn 2012-01-13 12:23:13

+0

他不希望它总结,只是为了显示它。或者我在问题中错过了它? – Abadon 2012-01-13 12:26:09

+0

这就是我认为,有一天我可以有多个市场,我猜.. – stefandoorn 2012-01-13 12:32:44

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:二:SS),你可以尝试将查询更改为:

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

这可以确保你会在当月的天团它们(1〜根据你餐桌上的日期。

+0

如果'\'date \''是'datetime'或'timestamp',您可以使用'WHERE \'date \'> = [STARTDATE HERE] AND \'date \'< [STARTDATE HERE] + INTERVAL 1 MONTH' – 2012-01-13 13:04:09

+0

我使用了我的一些代码:$ getresults = mysql_query(“SELECT * FROM results where where date between BETWEEN'2012- $ monthid-01 00:00:00'AND'2012- $ monthid-31 23:59:59'GROUP BY DAYOFMONTH(date)“);它运行,但以一种奇怪的方式,它输出两个记录,然后加载60秒,我得到这个错误:致命错误:最大执行时间60秒超过成员/ pages/results2.php行167上的这段代码时:while($ row = mysql_fetch_array($ getresults))你能看到我做错了什么? – ragebunny 2012-01-13 13:42:59

+0

如果你想让我把它放在原来的文章中,让它更容易在眼前说出来。 – ragebunny 2012-01-13 13:43:20