如果与mysql或php的值相同,则对数据进行分组


Group data if the same value with mysql or php?

如果值相似,我想将它们分组在一行中。

我必须分组的数据示例:

FG 555  | FRA  |    BRU | 07:00 | 07:50 | 26.Aug.2013
FG 555  | FRA  |    BRU | 07:00 | 07:50 | 2.Sep.2013  
FG 555  | FRA  |    BRU | 07:00 | 07:50 | 9.Sep.2013

BS 444  | MMF  |    TRN | 21:30 | 22:20 | 2.Oct.2013
BS 444  | MMF  |    TRN | 21:30 | 22:20 | 9.Oct.2013    
BS 444  | MMF  |    TRN | 21:30 | 22:20 | 16.Oct.2013   
BS 444  | MMF  |    TRN | 21:30 | 22:20 | 23.Oct.2013   

预期结果:

FG 555  | FRA   | BRU   | 07:00 | 07:50 | 26/Aug/2013 – 09/Sep/2013
BS 444  | MMF   | TRN   | 21:30 | 22:20 | 02/Oct/2013 – 23/Oct/2013

这能做到吗?请帮帮我。

感谢

您可以对日期使用MINMAX聚合,并使用简单的CONCAT格式化结果。您还没有提供列名,所以这个示例是通用的:

SELECT
  Col1Code,
  Col2Code,
  Col3Code,
  StartTime,
  EndTime,
  CONCAT(MIN(DateValue), ' - ', MAX(DateValue))
FROM MyTable
GROUP BY
  Col1Code,
  Col2Code,
  Col3Code,
  StartTime,
  EndTime

我使用php:

 $data = array(
    array("FG 555", "FRA", "BRU", "07:00", "07:50", "26.Aug.2013"),
    array("FG 555", "FRA", "BRU", "07:00", "07:50", "2.Sep.2013"),
    array("BS 444", "MMF", "TRN", "21:30", "22:20", "2.Oct.2013"),
    array("BS 444", "MMF", "TRN", "21:30", "22:20", "9.Oct.2013")
);
$_tmp = array();
foreach($data as $v){
    $_k = md5($v[0].$v[1].$v[2].$v[3].$v[4]);
    if(!isset($_tmp[$_k])){
        $_tmp[$_k] = $v;
        $_tmp[$_k]["min"] = $v[5];
        $_tmp[$_k]["max"] = $v[5];
        continue;
    }
    if(strtotime($v[5]) < strtotime($_tmp[$_k]["min"])) {
        $_tmp[$_k]["min"] = $v[5];
    }
    if(strtotime($v[5]) > strtotime($_tmp[$_k]["max"])) {
        $_tmp[$_k]["min"] = $v[5];
    }
}
var_dump($_tmp);

您需要再次使用foreach$_tmp来格式化数据。