MySQL + PHP (группировка по дате) - PullRequest
1 голос
/ 30 июля 2010

Я пытаюсь вывести список различных элементов, сгруппированных по дате, когда они были сохранены в базе данных ( отметка времени unix ).

Мне нужна помощь как с MySQL (запрос), так и с PHP (вывод).

Таблица MySQL

id | предмет | время
1 | test1 | 1280278800
2 | test2 | 1280278800
3 | test3 | 1280365200
4 | test4 | 1280451600
5 | test5 | 1280451600

OUTPUT

Сегодня
test5
test4

Вчера
test3

28 июля
test2
test1

Буду признателен за любую помощь в этом. Спасибо, -!)

Ответы [ 3 ]

4 голосов
/ 30 июля 2010

Вы можете преобразовать свою метку времени Unix в дату, используя DATE(FROM_UNIXTIME(time)).Это выведет что-то вроде 2010-07-30.

Следующее должно сгруппировать по дате.

SELECT id, subject, time, DATE(FROM_UNIXTIME(time)) AS date_column
GROUP BY date_column

Изменить: Не правильно прочитал ваш вопрос.

Для этого я бы просто запустил стандартные SELECT и ORDER BY time DESC.

Затем выполните группировку с помощью PHP.

$lastDate = null;

foreach ($rows as $row) {
    $date = date('Y-m-d', $row['time']);
    $time = date('H:i', $row['time']);

    if (is_null($lastDate) || $lastDate !== $date) {
        echo "<h2>{$date}</h2>";
    }

    echo "{$time}<br />";

    $lastDate = $date;
}
2 голосов
/ 30 июля 2010

для этого можно создать mysql udf, что-то вроде этого:

DELIMITER $$

DROP FUNCTION IF EXISTS `niceDate` $$
CREATE FUNCTION `niceDate` (ts INT) RETURNS VARCHAR(255) NO SQL
BEGIN

  declare dt DATETIME;
  declare ret VARCHAR(255);

  set dt = FROM_UNIXTIME(ts);

  IF DATE_FORMAT(dt, "%Y%m%d") = DATE_FORMAT(NOW(), "%Y%m%d") THEN SET ret = 'Today';
  ELSEIF DATE_FORMAT(dt, "%Y%m%d") = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), "%Y%m%d") THEN SET ret = 'Yesterday';
  ELSE SET ret = CONCAT(DATE_FORMAT(dt, "%M "), DATE_FORMAT(dt, "%d"));
  END IF;

  RETURN ret;

END $$

DELIMITER ;

Затем вы можете построить свой запрос следующим образом: select niceDate(your_date_field) from table group by niceDate(your_date_field) order by your_date_field desc

отказ от ответственности: я не проверял эту функцию, но вы должны понять.

0 голосов
/ 30 июля 2010

Самый простой способ - это, вероятно, отсортировать по метке времени (по убыванию) в SQL и выполнить группировку в PHP: выполнить итерацию по набору результатов, преобразовав метку времени в объект DateTime;если текущая дата отличается от предыдущей (подсказка: используйте DateTime :: format ()), вставьте подзаголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...