sql >> データベース >  >> RDS >> Mysql

MySQLで重複する行の名前を変更する

    PHPを使用できる場合は、PHPを介して使用することをお勧めします。 MySQLでこれを行う方法が見つかりませんでした。これは、元の行を含め、カウントが1を超えるすべての行を更新します。

    UPDATE table
    SET product_code = CONCAT(product_code, ' Copy')
    GROUP BY product_code
    HAVING COUNT(*) > 1
    

    あなたが望まない。したがって、phpを使用する場合は、これを行うことができます(テーブルの行数が少ないと仮定します(3000で十分です))

    <?php
    $result = mysql_query("SELECT * FROM table");
    $rowsCnt = array();
    while($row = mysql_fetch_assoc($result)){
        $rows[] = $row;
        $rowsCnt[ $row['product_code'] ]++;
    }
    
    foreach($rows as $index => $row) {
        if ($rowsCnt[ $row['product_code'] ] > 1) {
            mysql_query("UPDATE table SET product_code = '".mysql_real_escape_string($row['product_code'])." Copy' LIMIT ".($rowsCnt[ $row['product_code'] ] - 1)
        }
    }
    

    免責事項: 未検証!最初にバックアップを作成してください!



    1. SQLServerデータをSalesforce.comに挿入する

    2. Concat関数が機能していません-引数の数が無効です

    3. PostgreSQLで遅いクエリログを有効にする方法

    4. OracleのDBTIMEZONE関数