得到大表(~1.6m行),看起来像:
------------------------------------
| id | text | image_id | order |
------------------------------------
| 2 | random | 12 | 1 |
------------------------------------
| 3 | random | 12 | 2 |
------------------------------------
| 5 | random | 12 | 1 |
------------------------------------
| 6 | random | 12 | 2 |
------------------------------------
| 8 | random | 17 | 1 |
------------------------------------
| 9 | random | 17 | 1 |
------------------------------------
目标是:
------------------------------------
| id | text | image_id | order |
------------------------------------
| 2 | random | 12 | 1 |
------------------------------------
| 3 | random | 12 | 2 |
------------------------------------
| 8 | random | 17 | 1 |
------------------------------------
许多行具有不同的ID但其他数据是相同的,因此我们只需要保留每个订单号的一行(111222333444需要为1234)。
此查询适用于小型表:
DELETE n1 FROM table n1, table n2 WHERE image_id = 12 AND n1.id > n2.id AND n1.order = n2.order
但是对于大表查询需要的时间太长,所以接收超时。
DB Backend是Laravel& PHP,我们使用块来查询这些表。
基本上目标是基于image_id抓取大表并删除重复项,因此对于每个image_id,我们获得了具有以下订单列的行:1,3,4,5,6,7,8等。
答案 0 :(得分:0)
只需使用laravel
中的unique()
方法即可
$uniqueData = Model::unique(function ($item) {
return $item['image_id'].$item['order'];
});
$uniqueData->values()->all();
return $uniqueData;