我在这里有一个棘手的问题。
我在表中有很多结果,这个表有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
并且或多或少会重复一段时间。
再次感谢。
答案 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/>";
}