PHP MySQL группы по дате в формате гггг-мм-дд - PullRequest
1 голос
/ 15 марта 2012

У меня была таблица mysql под названием events с полями: id, date и name.Поле даты имеет формат гггг-мм-дд чч :: мм: сс редактировать: то есть оно находится в формате даты и времени

Я хочу сгруппировать события по дням, и я не был уверен, как к этому подойти- есть ли способ выбрать только месяц и день с поля?или я должен использовать PHP после того, как я выбрал все «события»

, моя конечная цель - получить что-то вроде этого:

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

Я нашел MySQL, выберите с помощью datetime, сгруппируйтетолько дата , но я не уверен, как это реализовать:

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";
    }

Ответы [ 4 ]

1 голос
/ 15 марта 2012

Если вы используете group by, вы не получите ни одной строки.Таким образом, путь, который вы хотите, невозможен через 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";
   }
}
1 голос
/ 15 марта 2012

Вы действительно должны использовать php, чтобы сделать это.Но поскольку большая часть нынешней системы отделяет логику от дисплея, я бы использовал только один проход, а не (NUMBER OF DAYS + 1) SELECT, и подготовил бы массив, который я смогу использовать позже для моего дисплея.* А потом, когда мне это понадобится (через шаблон или ваше «представление»)

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

, чтобы он соответствовал заданному вами формату.

Надеюсь, что это помогло

0 голосов
/ 15 марта 2012

Я согласен с Хараоне, отделить логику от дисплея.При этом, я думаю, что что-то похожее на этот запрос может быть то, что вы ищете:

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;
0 голосов
/ 15 марта 2012

Я думаю, что из этого вопроса / ответа вы можете получить что-то вроде этого

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

На самом деле это не «групповые» даты, как вы хотите, но я думаю, что вы можете использовать php, чтобы продолжить с этого результата.

...