2014-11-20 82 views
0
$q2 = "SELECT startdate, 
      GROUP_CONCAT(summary separator '<br />') as summary, 
      GROUP_CONCAT(TIME(startdate)) AS starttime, 
      GROUP_CONCAT(TIME(enddate)) AS endtime 
      FROM oc_clndr_objects 
      WHERE calendarid = $calID 
      GROUP BY DATE(startdate) 
      ORDER BY startdate ASC"; 

這上面的查詢只返回一個結果(如預期一個1日起事件) - 但是有1個事件,每天被重複,且查詢並沒有超越第一個開始日期。MySQL的GROUP BY查詢返回只有一排

我知道它與GROUP BY子句有關,並且關於聚合函數有些事情,但我無法圍繞它進行包裝。 - 輸出是可見的http://www.deliriousdreams.co.uk/ - 「DJ Schedule Test」

任何幫助糾正輕微非法SQL查詢將不勝感激。

編輯:好的,groovy人,修改爲DATE(startdate)AS startdate。有一點小問題,之後我希望能夠通過DATE對它們進行排序,然後是TIME(最早的第一個) - 顯然,DATE和TIME都是從startdate(DATETIME標記)派生的 - 這可能是通過修改上述查詢或我必須做一些PHP巫術?

+0

您的GROUP BY與SELECT的列表不同。你需要使用'SELECT DATE(startdate)'來使你的工作方式符合你的想法。 – 2014-11-20 18:37:19

+0

嘗試選擇DATE(startdate)而不是startdate – Jaylen 2014-11-20 18:37:38

+0

StartDate可能是日期時間。時間可能因記錄而異。正如其他人所說,將其轉換爲日期以便減少時間,然後該團隊應該工作。 – xQbert 2014-11-20 18:42:50

回答

0

就這麼幹!這是我正在尋找的解決方案...

SELECT 
     DATE(startdate) AS startdate, 
     GROUP_CONCAT(summary separator '<br />') as summary, 
     GROUP_CONCAT(TIME(startdate)) AS starttime, 
     GROUP_CONCAT(TIME(enddate)) AS endtime 
FROM 
     (SELECT * FROM oc_clndr_objects ORDER BY startdate ASC) AS temp 
WHERE calendarid = $calID 
GROUP BY DATE(startdate) 
ORDER BY DATE(startdate) ASC 
0

您選擇STARTDATE但DATE(startdate)

分組如果該字段開始日期是datetime和你想組僅按照日期,那麼你應該選擇一個日期數據和組。

試着改變你的查詢到該

  SELECT DATE(startdate) AS startdate, 
     GROUP_CONCAT(summary separator '<br />') as summary, 
     GROUP_CONCAT(TIME(startdate)) AS starttime, 
     GROUP_CONCAT(TIME(enddate)) AS endtime 
     FROM oc_clndr_objects 
     WHERE calendarid = $calID 
     GROUP BY DATE(startdate) 
     ORDER BY startdate ASC 

我希望$calID是乾淨的可變否則你的代碼是受到SQL注入

+0

$ calID純粹是一個從以前的SQL查詢中提取的int。我沒有測試過你的答案(儘管我會) - 事實證明,從ownCloud數據庫中提取數據是一個問題 - 重複事件不會顯示在他們重複的日期上,只是初始日期,因此不會反映在日程安排。否則,我現有的查詢很好。 – 2014-11-20 19:14:58

+0

話雖如此,我已經提出了改變建議。 – 2014-11-21 08:55:41