2012-03-14 2 views
1

나는 이벤트와 관련된 ID, 날짜 및 이름 필드가있는 mysql 테이블이 있습니다. 날짜 필드의 형식은 yyyy-mm-dd hh :: mm : ss 편집입니다. 날짜/시간 형식을 의미합니다.PHP mysql 그룹 (날짜 : yyyy-mm-dd 형식)

일별 이벤트를 그룹화하고 싶습니다. 현장에서 월과 일만 선택하는 방법이 있습니까? 또는 내가

내 최종 목표는이 같은 것입니다 모든 "이벤트"를 선택 후 내가 PHP를 사용한다 : 나는 MySQL select using datetime, group by date only을 발견

March 10th: 
    event1, 
    event2 
March 11th: 
    event4, 
    event5 

을하지만 난 그것을 구현하는 방법을 잘 모르겠어요 :

SELECT DATE_FORMAT(date, '%H%i'), DATE_FORMAT(date, '%M %D'), name FROM events ORDER BY date 

감사! 편집

:

나는 그 질문/답변에서 생각
$sql = "select team1, team2, DATE_FORMAT(date,'%Y-%m-%d') as created_day FROM games WHERE attack = '1' GROUP BY created_day"; 
    $result = mysql_query($sql); 
    $curDate = ""; 

    while (list($team1, $team2, $date) = mysql_fetch_row($result)) 
    { 
     if ($date != $curDate) 
     { 
     echo "$date --------\n"; 
     $curDate = $date; 
     } 

     echo "game data: $team1 $team2"; 
    } 
+0

실제 날짜 유형은 무엇입니까? 내 말은, datetime 또는 timestamp인지 (희망)인가, 아니면 그것이 말한대로 형식화 된 문자열이라는 것을 의미합니까? – Nanne

+0

@Nanne datetime 형식입니다. – jaredrada

+0

편집 할 때 SQL 끝에 "GROUP BY created_day"가 있습니다. 당신은 그것을 제거해야합니다. 그렇지 않으면 날짜 당 한 행만 반환합니다. DATE_FORMAT ('date', '% Y- % m- % d')''대신''DATE ('date')''를 사용할 수 있습니다. – nnichols

답변

1

실제로이 작업을 수행하려면 PHP를 사용해야합니다. 그러나 대부분의 현재 시스템은 디스플레이에서 로직을 분리하므로, 한 번만 사용하고 SELECT (NUMBER OF DAYS + 1)는 사용하지 않고 디스플레이에 나중에 다시 사용할 수있는 배열을 준비합니다.

$query = "SELECT DATE_FORMAT(date, '%M %D') as d, name FROM yourtable ORDER BY date"; 
$foo=array(); 
$result = mysql_query($query); 
while($row = mysql_fetch_assoc($result)) { 
    //some logic to test if it's safe to add the name 
    $foo[$row['d']][]=$row['name']; 
} 

그리고 내가 (템플릿 또는 "보기"를 통해) 필요한 것 때 다음

foreach($foo as $date => $events) { 
    echo $date . ":\n\t";   
    echo implode(",\n\t", $events); 
    echo "\n"; 
} 

그래서 당신이 자신에게 설정 형식을 맞는다.

희망이

0

것은, 당신이 대신

March 10th, event1 
March 10th, event2 
March 11th, event4 
March 11th, event5 

그것은하지 않습니다 정말 '그룹 같은 것을 얻을 수 있습니다 :

이를 사용하여 종료 '날짜를 원하는대로하지만 나는이 결과로 계속 PHP를 사용할 수 있다고 생각합니다.

1

group by을 사용하면 하나의 행을 가져 오지 않습니다. 그래서 당신이 원하는 방식은 AFAIK 그룹을 통해서는 불가능합니다.

$query = "SELECT distinct(DATE_FORMAT(date, '%M %D')) as d FROM yourtable"; 
$result = mysql_query($query); 
while($row = mysql_fetch_assoc($result)) { 
    echo $row['d'] 
    $sql = "SELECT * FROM yourtable WHERE DATE_FORMAT(date, '%M %D')='$row[d]'"; 
    $rs = mysql_query($query); 
    while($r = mysql_fetch_assoc($rs)) { 
     echo "event"; 
    } 
} 
0

나는 Kharaone, 별도의 논리와 디스플레이에 동의합니다. 즉,이 쿼리와 비슷한 것이 당신이 찾고있는 것이라고 생각합니다 :

SELECT A FROM 
(
    SELECT DATE_FORMAT(date,'%M %D:') AS A, DATE(date) AS B, 1 AS C FROM games GROUP BY DATE(date) 
     UNION ALL 
    SELECT name AS A, DATE(date) AS B, 2 AS C FROM games 
) X 
ORDER BY B, C ASC;