簡體   English   中英

SQL組數據按周日期

[英]Sql group data by week date

我有下表:

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-06-01');
INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (3,'name3','2017-02-27');
INSERT INTO `test`(`id`, `title`, `due_date`) VALUES (4,'name4','2017-03-10');
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>

現在,我打印所有行。 我有due_date列,日期格式。 如何將三個類別的數據分組:本周,下周和其他周(取決於Due_date)。 並執行我的代碼打印:

This week
id name  due_date
3  name3 2017-02-27
Next week
4  name4  2017-03-10
Other week
1 ...
2 ...
5 ...

您在詢問有關SQL Group的信息,但這不是您所需要的。 您只需要對查詢進行排序,然后在循環中根據需要中斷表。

$database->query("SELECT * from test WHERE due_date >= NOW() ORDER BY due_date");

WHERE子句不會向您顯示過去的任務。 檢查是否需要。

然后在FOREACH語句中,您需要始終將當前元素與已經解析的最后一個元素進行檢查

$lastDiff = -1;
$current_week = date('W') ;
foreach ($arr as $row):
    array_map('htmlentities', $row);
    $currentWeek = date('W', strtotime($row['due_date']));
    $diff = $week - $current_week;
    if ($lastDiff != $diff && $lastDiff < 2):
        $lastDiff = $diff;
        ?><tr><td><?php echo week_name($diff) ?></td></tr>
        <?php
    endif;
    ?>
    <tr>
        <td><?php echo implode('</td><td>', $row); ?></td>
    </tr><?php
endforeach;

並使用以下自定義功能修復標題分隔符

function week_name($week)
{
    switch ($diff) {
        case 0:
        $name = 'This Week';
        break;
        case 1:
        $name = 'Next Week';
        break;
        default:
        $name = 'Future Weeks';
        break;
    }

    return $name;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM