如何查询重复数据的第一个id

时间:2016-04-21 10:38:44

标签: php

我有一张表中有重复数据的表,我想选择重复数据并使用所有重复数据的第一个数据ID

Table1
id    |     name    | Number    |
001   |     amanda  |  457      |
002   |     amanda  |  457      |
003   |     jose    |  458      |
004   |     jose    |  458      |
005   |     past    |  459      |
006   |     past    |  459      |


Now I want the duplicate to have the same `id` for all the duplicated data

What I expect

Table2
id    |     name    | Number    |
001   |     amanda  |  457      |
001   |     amanda  |  457      |
003   |     jose    |  458      |
003   |     jose    |  458      |
005   |     past    |  459      |
005   |     past    |  459      |

我想要一个可以进行此分组的查询;这是我尝试过的:

  $query ="SELECT
            id,
            name,
            number
        FROM
            `Table`  ";

$result=$db->query($query);

while($row=mysqli_fetch_assoc($result)){

        $id=$row['iD']; 
        $number=$row['number']; 

     $ss="UPDATE `Table` SET `id`='$id' WHERE `id` =$id";
        $e=$db->query($ss);


}

我知道这是错的。如果有人能帮助我做对,我将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

您需要按照以下方法解决问题。

1.你需要获得第一个身份和年长的身份 2.使用第一个ID更新旧版本。

我更新了您的查询以获取第一个和更早的ID。

$query ="SELECT 
    DT2.id as olderID,
    DT1.id as newID, 
    DT1.name, 
    DT1.Number
FROM 
    duplicate_table DT1
LEFT JOIN (
    SELECT 
        id, 
        name, 
        Number 
    FROM 
        duplicate_table 
    GROUP BY 
        name, 
        id 
    ORDER BY 
        name, 
        id ASC 
) DT2 ON ( DT2.name=DT1.name)
WHERE 
    DT1.id > DT2.id
GROUP BY 
    DT1.name, 
    DT1.id 
ORDER BY 
    DT1.name, 
    DT1.id DESC ";

$result=$db->query($query);

while($row=mysqli_fetch_assoc($result)){
        $olderID=$row['olderID']; 
        $newID=$row['newID']; 
        $id=$row['iD']; 
        $number=$row['number']; 
     $ss="UPDATE `Table` SET `id`='$olderID' WHERE `id` =$newID";
        $e=$db->query($ss);
}