一个查询中有多个查询?

时间:2016-05-04 19:56:30

标签: php mysql

我在数据库中有一个表,其中包含Mysql中某些员工的一周中每天的开始和停止时间,方法如下:

Agent     Day     Start     End
agent1    Mon     17:00     23:00
agent1    Tue     16:00     23:00
agent1    Wed     18:00     23:00

我需要以下列方式显示:

Agent       Mon              Tue           Wed
        start   stop    start   stop  start   stop
agent1  17:00   23:00   16:00   23:00 18:00   23:00

有没有办法通过查询执行此操作?我想在一个查询中做多个查询,但我不太明白。

3 个答案:

答案 0 :(得分:0)

你可以起诉很多案件

select agent,
      case day when 'Mon' then start end as start_mon,
      case day when 'Mon' then `end` end as end_mon, 
      case day when 'Tue' then start end as start_tue,
      case day when 'Tue' then `end` end as end_the,    
      case day when 'Wed' then start end as start_wed,
      case day when 'Wed' then `end` end as end_wed
 from your_table      

对于gettin在同一行代理上的值,您可以使用临时表和组bt

select agent, max(start_mon), max(end_mon), max(start_tue), max(end_tue), max(start_wed), max(end_web)
   from ( 
        select agent,
           case day when 'Mon' then start end as start_mon,
           case day when 'Mon' then `end` end as end_mon, 
           case day when 'Tue' then start end as start_tue,
           case day when 'Tue' then `end` end as end_the,    
           case day when 'Wed' then start end as start_wed,
           case day when 'Wed' then `end` end as end_wed
        from your_table ) as t
    group by agent;    

答案 1 :(得分:0)

您只需要一个查询,您可以按正确的顺序获取所有信息。所以首先按代理商订购然后按天订购。

由于您无法按字母顺序排列日期,因此您需要一个CASE语句来获得正确的顺序:

SELECT
    *
FROM `your_table`
ORDER BY
    `agent`,
    CASE
        WHEN `Day` = 'Mon' THEN 1
        WHEN `Day` = 'Tue' THEN 2
        ...
        WHEN `Day` = 'Sun' THEN 7
    END

存储日期编号而不是文本会使这更有效率。

然后,当您获得所有行时,您将跟踪当前代理,并在代理更改后立即添加新行。

答案 2 :(得分:0)

考虑使用group_concat函数的解决方案,它将获得具有所有所需时间范围的特定代理的所有日期:

SELECT Agent, group_concat(Day,' ', Start, '-', End separator '/') AS dayData 
FROM `schedules`
GROUP BY Agent

这将得到结果集,如下所示:

Agent  | dayData    
-----------------------------    
agent1 | Mon 17:00-23:00/Tue 16:00-23:00/Wed 18:00-23:00
agent2 | .... ..

在PHP端获取结果集时,您可以使用explode('/', $row['dayData'])轻松处理每一行(获取带有时间范围的天数)。然后,使用explode(" ", $day)爆炸每个项目...等等。在那之后,你可以创造一个美丽的&#34;输出使用html <table>