@alexs15

SQL — как сделать группировку данных по неделям?

Здравствуйте. Столкнулся с такой проблемой - не могу сгруппировать данные по неделям.
Нужно, чтобы было 3 группы: This week, Next week, Other week

Вот моя таблица:
CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `due_date` date NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (1,'name1','2017-02-02');
INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (2,'name2','2017-02-12');
INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (3,'name3','2017-02-20');
INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (4,'name4','2016-03-02');
INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (5,'name5','2016-06-09');


Через php вывожу все данные таблицы:
$database = new Database();
    $database->query("SELECT * from test");
    $database->execute();
    $arr = $database->resultset(); ?>
    <table>
        <thead>
        <tr>
            <th>id</th>
            <th>name</th>
            <th>due_date</th>
        </tr>
        </thead>
        <tbody>
        <?php foreach ($arr as $row): array_map('htmlentities', $row); ?>
            <tr>
                <td><?php echo implode('</td><td>', $row); ?></td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>


Как сделать запрос, чтобы вывод был в виде:
This week
id name  due_date
3  name3 2017-02-27
Next week
4  name4  2017-03-10
Other week
1 ...
2 ...
5 ...


Как правильно сгруппировать можно? Заранее спасибо за помощь.
  • Вопрос задан
  • 1470 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
week(due_date)
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
select if(CONCAT(year(ph.created), '_', week(ph.created)) = dt.cr, -1, 
          if(CONCAT(year(ph.created), '_', week(ph.created)) = dt.nx, -2, (year(ph.created) * 100) + week(ph.created)))  t
  from test ph
inner join (select CONCAT(year(now()), '_', week(now())) cr,
            CONCAT(year(now()), '_', week(now()) + 1) nx from dual) dt on 1=1
order by t
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы