Your code will remove all of the entries from the database (unless there is only one entry in @test), because for each element of @test it removes all the entries that are not equal to that element. You want to do the opposite: remove all the elements that are not represented in @test (i.e., not equal to _any_ of the entries in @test). So, you're looping over the wrong thing. Instead of looping over the list of things you don't want to delete, you want to loop over all the entries in the database and for each one you want to decide whether to delete it or not.

# This is untested. Test on sample data that # doesn't matter before using on live data. my %represented = map{$_=>1} @test; my $sth = $dbh->prepare("SELECT Name FROM tnt"); my $del=$dbh->prepare("DELETE FROM tnt WHERE Name=?"); $sth->execute(); while (my $line = $sth->fetchrow_hashref()) { if (not $represented{$$line{Name}}) { $del->execute($$line{Name}); } }

Update: minor optimization (prepare $del once outside the loop, instead of n times inside).


$;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}} split//,".rekcah lreP rehtona tsuJ";$\=$ ;->();print$/

In reply to Re: deleting from a mysql database by jonadab
in thread deleting from a mysql database by bory

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.