2012-01-13 102 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