-6

次のようなデータベースがあります。

ID | タイトル | タイムスタンプ
-------------------------------------------------- -----------
0 テスト 1 2013-02-26 00:00:00
1 テスト 2 2013-02-26 00:00:00
2 テスト 3 2013-02-29 00:00:00
3 テスト 4 2013-03-31 00:00:00

それらを選択して、次のようにグループ化して出力したい:

明日 
テスト 1
テスト 2

今週
テスト 3

以降
テスト 4

出力するにはMySQLとPHPが必要ですが、わかりません。

4

2 に答える 2

3

および関数でCASE式を使用できます。Week()Day()

select title,
  case 
    when week(timestamp) = week(curdate())
      then 
        case 
          when day(timestamp) = day(curdate()) +1
          then 'Tomorrow'
          else 'This Week'
        end 
    when week(timestamp) > week(curdate())
      then 'And Beyond'
  end as Col
from yourtable

SQL Fiddle with Demoを参照してください。

または、これは次のように記述できます。

select title,
  case 
    when week(timestamp) = week(curdate())
        and day(timestamp) = day(curdate()) +1
      then 'Tomorrow'
    when week(timestamp) = week(curdate())
      then 'This Week'
    else 'And Beyond'
  end as Col
from yourtable

デモで SQL Fiddle を参照してください

これは以下を返します:

|  TITLE |        COL |
-----------------------
| Test 1 |   Tomorrow |
| Test 2 |   Tomorrow |
| Test 3 |  This Week |
| Test 4 | And Beyond |
于 2013-02-25T18:49:44.267 に答える
1

計算フィールドを作成してグループ化できるようにするには、select句にcaseステートメントが必要になる可能性があります。

SELECT `id`, `title`, `timestamp`,
    (CASE
        WHEN timestamp < DATEADD(NOW(), INTERVAL 1 DAY THEN 'Tomorrow'
        ELSE WHEN timestamp < DATEADD(NOW(), INTERVAL 1 WEEK THEN 'This week'
        ELSE 'Beyond'
    END) AS `timeframe`
FROM table
ORDER BY `timestamp` ASC

ここでは、タイムスタンプの並べ替え順序を利用していることに注意してください。これにより、ロジックグループが作成されます。

于 2013-02-25T18:54:24.047 に答える