循环多维数组和组结果

时间:2016-04-18 03:40:00

标签: php mysql

我有一个类似于以下事件的MySQL表:

+----+------------+-----------+----------+----------+
| id |    date    | starttime | endtime  | location |
+----+------------+-----------+----------+----------+
|  1 | 2018-12-22 | 18:00:00  | 21:30:00 |        3 |
|  2 | 2018-12-23 | 18:00:00  | 21:30:00 |        2 |
|  3 | 2018-12-25 | 18:00:00  | 21:30:00 |        1 |
|  4 | 2018-12-21 | 07:00:00  | 10:30:00 |        3 |
|  5 | 2018-12-21 | 18:00:00  | 21:30:00 |        3 |
+----+------------+-----------+----------+----------+

我要做的是列出按位置分组的每个事件的详细信息。例如,上面的数据将导致:

Location: 1
Date(s): 2018-12-25
Time(s): 18:00:00 - 21:30:00

Location: 2
Date(s): 2018-12-23
Time(s): 18:00:00 - 21:30:00

Location: 3
Date(s): 2018-12-21 | 2018-12-22
Time(s): 07:00:00 - 10:30:00 or 18:00:00 - 21:30:00 | 18:00:00 - 21:30:00

独立的while循环显示每个位置,除非我在查询中分组。如果我检查最后一个位置是否等于当前位置,我将超过查询中的分组依据,但如果该位置有多个日期/时间,则无法将日期和时间与位置相关联。我已经能够通过在while循环中重新查询来完成我需要的东西,但我认为必须有更好,更有效的方法。最后,如果您注意到,我在多个日期/时间之间使用了“|”作为分隔符。即使我按照上面提到的那样得到结果列出,我也似乎无法在最后一次列表后显示最后一个“|”。

2 个答案:

答案 0 :(得分:0)

有几种方法

  1. 首先填充位置

    # Inputs: STA−1, STA−2, STA−3, ..., STA−n
    set stations [list "STA−1" "STA−2" "STA−3"]
    
    # Shared Variables:
    # for every i, 1 ≤ i ≤ n
    # counter[i] ∈ { / 0, 1, 2,..., N}, initially 0, updated by stations
    
    array set counter {}
    set n 10
    set i 0
    while {$i < $n} {
        set counter($i) 0
        incr i
    }
    
  2. 使用foreach

    检索第一个查询
    q1 = "SELECT DISTINCT(location) FROM Table ORDER BY location;"
    

答案 1 :(得分:0)

尝试此查询:

Select group_concat(date seperator ,'|'), group_concat(starttime ,'|', endtime ) timings, location from tablename group by location order by location