2

次のコードを使用して、テーブルの行を複製できます。

$uuid = 'blahblah';    
INSERT INTO events (title, subtitle) SELECT title, subtitle FROM events WHERE uuid = '$uuid'

ただし、新しく複製された行の新しい一意の ID を生成したいと考えています。このテーブルの列の名前は「uuid」です。複製プロセス中に新しい一意の ID を挿入するにはどうすればよいですか? INT 型の自動インデックス columnt がありますが、行ごとに VARCHAR 型 (英数字混合) の一意の ID 列もあります。

前もって感謝します。

4

2 に答える 2

3

私はここで答えを見つけました - PHP MySQL Copy a row within the same table... with Primary and Unique key

基本的に、ID 以外のすべてを選択し、主キーが自動インクリメントに設定されている限り、問題はありません。

于 2012-12-14T20:07:04.123 に答える
0
/*
eduardoaf.com
https://github.com/eacevedof/
*/
DELIMITER $$

DROP PROCEDURE IF EXISTS `prc_clone_row`$$

CREATE PROCEDURE `prc_clone_row`(
    sTableName VARCHAR(25)
    ,sId VARCHAR(5)
    )
BEGIN
    SET @sSQL := CONCAT('SELECT (MAX(id)+1) AS idnew FROM ',sTableName,' INTO @sIdNew');
    PREPARE sExecute FROM @sSQL;
    EXECUTE sExecute;

    IF (@sIdNew IS NOT NULL) THEN
        SET @sSQL := CONCAT('CREATE TEMPORARY TABLE tempo_table SELECT * FROM ',sTableName,' WHERE id = ',sId,'; ');
        PREPARE sExecute FROM @sSQL;
        EXECUTE sExecute; 

        SET @sSQL := CONCAT('UPDATE tempo_table SET id=',@sIdNew,' WHERE id=',sId,'; ');
        PREPARE sExecute FROM @sSQL;
        EXECUTE sExecute;        

        SET @sSQL := CONCAT('INSERT INTO ',sTableName,' SELECT * FROM tempo_table WHERE id=',@sIdNew,'; ');
        PREPARE sExecute FROM @sSQL;
        EXECUTE sExecute; 

        SET @sSQL := CONCAT('SELECT * FROM ',sTableName,' ORDER BY id DESC;');
        PREPARE sExecute FROM @sSQL;
        EXECUTE sExecute;   
    ELSE
        SELECT CONCAT('TABLE ',sTableName,' IS EMPTY!!!') AS msg;
    END IF;

END$$

DELIMITER ;

CALL prc_clone_row('app_cms_content','1');
于 2016-12-29T17:54:46.317 に答える