in reply to Increase a value inside MySQL query using perl

Crossposted at http://stackoverflow.com/questions/33110626/increase-a-value-inside-mysql-query-using-perl. I cross-linked this cross-postings for maximum collaboration efficiency

  • Comment on Re: Increase a value inside MySQL query using perl

Replies are listed 'Best First'.
Re^2: Increase a value inside MySQL query using perl
by Anonymous Monk on Oct 15, 2015 at 00:26 UTC
    Speaking of collaboration, http://stackoverflow.com/questions/1167885/update-sql-with-consecutive-numbering says you can do it using mysql5, like
    SET @a:=10; UPDATE table SET table.ID=@a:=@a+1 WHERE table.ID=5

    In sqlite I employ limit

    #!/usr/bin/perl -- use strict; use warnings; use DBI; use DBD::SQLite; use Data::Dump qw/ dd /; unlink 'goner.sqlite'; my $dbh = DBI->connect( "DBI:SQLite:database=goner.sqlite", undef, undef, {qw/RaiseError 1/} ); eval { $dbh->do('CREATE TABLE NameId ( ID INTEGER , Name TEXT );'); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('1','bar');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('2','bar');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FEE');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FII');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FOO');!); } or warn "$@"; dd( $dbh->selectall_arrayref('select * from NameID' ) ); dd( $dbh->selectrow_array(q{ select COUNT(*) from NameID WHERE ID='5' + } ) ); #~ http://www.sqlite.org/compile.html#enable_update_delete_limit #~ https://www.sqlite.org/lang_update.html #~ https://dev.mysql.com/doc/refman/5.0/en/update.html my $sql = qq{ UPDATE NameID SET ID=? WHERE ID='5' LIMIT 1 }; my( $count ) = $dbh->selectrow_array(q{ select COUNT(*) from NameID W +HERE ID='5' } ); my $nid = 10; while( $count ){ dd({ rowsaffected => $dbh->do( $sql, {}, $nid ) }); dd( $dbh->selectall_arrayref('select * from NameID' ) ); $nid++; $count--; } undef $dbh; unlink 'goner.sqlite'; __END__ [[1, "bar"], [2, "bar"], [5, "FEE"], [5, "FII"], [5, "FOO"]] 3 { rowsaffected => 1 } [[1, "bar"], [2, "bar"], [10, "FEE"], [5, "FII"], [5, "FOO"]] { rowsaffected => 1 } [[1, "bar"], [2, "bar"], [10, "FEE"], [11, "FII"], [5, "FOO"]] { rowsaffected => 1 } [[1, "bar"], [2, "bar"], [10, "FEE"], [11, "FII"], [12, "FOO"]]