如何从一列中选择所有数据而其他列具有一定条件?

时间:2018-03-18 15:57:06

标签: mysql select conditional-statements

我有这个table room_table,标题是

   +------------------------------------------------------------------------+
   |id|  day | startTime | endTime | room    | subject  | section | fullname|
   +------------------------------------------------------------------------+
   |1 |monday    | 7:00AM | 7:30AM    | NET LAB | Monday Subj      | 1ITG    |  John Doe|
   |2 |tuesday   | 7:30AM | 8:00AM    | NET LAB | Tuesday Subj     | 1ITG    |  John Doe|
   |3 |Wednesday | 3:00PM | 3:30PM    | NET LAB | Wednesday Subj   | 1ITG    |  John Doe|
   |4 |Thursday  | 4:30PM | 5:00PM    | NET LAB | Thursday Subj    | 1ITG    |  John Doe|
   |5 |Friday    | 7:00PM | 7:30PM    | NET LAB | Friday Subj      | 1ITG    |  John Doe|
   |6 |Saturday  | 8:30PM | 9:00PM    | NET LAB | Saturday Subject | 1ITG    |  John Doe|

如何在这样的php中显示它?带有时间标题的表格以及具有特定时间跨度的相应主题的所有上课日期。在制定嵌套的select语句时总是会出错。

+----------------------------------------------------------------------------+
|   TIME   |  MONDAY  |  TUESDAY   |    WEDNESDAY | THURSDAY |FRIDAY|SATURDAY|
+----------------------------------------------------------------------------+
|7:00-7:30| Monday Subj |            |              |              |           |                |
|7:30-8:00|             |Tuesday Subj|              |              |           |                |
|8:00-8:30|             |            |              |              |           |                |
|8:30-9:00|             |            |              |              |           |                |
|9:00-9:30|             |            |              |              |           |                |
|9:30-10:00|            |            |              |              |           |                |
|10:00-10:30|           |            |              |              |           |                |
|10:30-11:00|           |            |              |              |           |                |
|11:00-11:30|           |            |              |              |           |                |
|11:30-12:00|           |            |              |              |           |                |
|12:00-12:30|           |            |              |              |           |                |
|12:30-1:00|            |            |              |              |           |                |
|1:00-1:30|         |            |              |              |           |                |
|1:30-2:00|         |            |              |              |           |                |
|2:00-2:30|             |            |              |              |           |                |
|2:30-3:00|         |            |Wednesday Subj|              |           |                |
|3:00-3:30|         |            |              |              |           |                |
|3:30-4:00|         |            |              |              |           |                |
|4:00-4:30|         |            |              |              |           |                |
|4:30-5:00|         |            |              |Thursday Subj |           |                |
|5:00-5:30|         |            |              |              |           |                |
|5:30-6:00|         |            |              |              |           |                |
|6:00-6:30|         |            |              |              |           |                |
|6:30-7:00|         |            |              |              |           |                |
|7:00-7:30|         |            |              |              |Friday Subj|                |
|7:30-8:00|         |            |              |              |           |                |
|8:00-8:30|             |            |              |              |           |                |
|8:30-9:00|         |            |              |              |           |Saturday Subject|

我有这个查询,但它只输出主题的时间。即使在特定时间内没有相应的主题,如何更改此项以显示所有时间?

    SELECT time_format(startTime, '%h:%i%p') as newStart, 
    time_format(endTime, '%h:%i%p') as newEnd,
    max(case when day = 'Monday' then subject else null end) monday,
    max(case when day = 'Tuesday' then subject else null end) tuesday,
    max(case when day = 'Wednesday' then subject else null end) wednesday,
    max(case when day = 'Thursday' then subject else null end) thursday,
    max(case when day = 'Friday' then subject else null end) friday,
    max(case when day = 'Saturday' then subject else null end) saturday
    from table where section='1ITG' group by newStart,newEnd

0 个答案:

没有答案