如何根据列之间的操作合并mysql中的行

时间:2012-03-26 20:06:00

标签: php mysql merge row

我有下表

tbl
|city| district| start_num| end_num|
|a     |b        |10       |19|
|a     |b        |20       |29|
|a     |b        |30       |33|
|c     |d        |34       |40
|c     |d        |41       |59|
|c     |d        |70      |100|

我想要另一个表格,考虑到我合并了行: 同一个城市和地区以及范围起点MUSS是连续的。

tbl_res should be 
|city |district |start_num |end_num|
|a     |b        |10        |33|
|c     |d        |34        |59|
|c     |d        |70       |100|

这个想法是消除与另一行的范围是连续的行,其中一行具有更大的连续范围。

也许循环浏览php?

1 个答案:

答案 0 :(得分:0)

好的,我想我已成功解决了这个问题。假设没有任何范围重叠,我认为这有效:

SET @group = 1, @current:= 0;
SELECT city,district,MIN(start_num),MAX(end_num) FROM (
  SELECT 
    *,
    IF((start_num-@current)=1,(@group),(@group:=@group+1)) AS contiguent_group,
    @current:=end_num 
  FROM `testtable`) AS contiguous
GROUP BY city,district,contiguent_group

如果你在同一个城市/地区组合中有两个独立的连续小组,它甚至可以工作。