ringa_lee2017-04-10 17:31:452楼
先排序,后比较
不建议在数据库中操作,最方便的就是把这10w 条数据取出来,放到 php 内存中来操作.
代码如下
$sql = "select id,data from table order by data asc";
$result = [
0=> ['id'=>3, 'data'=>1],
1=> ['id'=>1, 'data'=>2],
2=> ['id'=>4, 'data'=>2],
3=> ['id'=>5, 'data'=>2],
4=> ['id'=>2, 'data'=>5],
];
//遍历小于
//小于当前元素下标的元素
//遍历大于
//大于当前元素下标的元素
//相同,有点复杂,代码如下
$same = array();
$current = 0;
$next = $current + 1;
//遍历一遍数组
while(isset($result[ $next ])) {
$data = $result[ $current ][ 'data' ];
//如果当前元素值和下一个元素值一样,放到值数组中
if ($data == $result[ $next ][ 'data' ]) {
$same[ $data ][] = $result[ $next ];
$next ++;
}else{ //如果不一样,当前元素指向 当下标为$next的元素
$current = $next;
$next = $current+1;
}
}
var_export($same);
//结果
array (
2 =>
array (
0 =>
array (
'id' => 4,
'data' => 2,
),
1 =>
array (
'id' => 5,
'data' => 2,
),
),
)