Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Perl and MySql, how can I check for an empty result?

Tags:

mysql

perl

Way oversimplified example:

# Get Some data
$query = $db->prepare(qq{
    select * from my_table where id = "Some Value"
});
$query->execute;

# Iterate through the results
if ( *THE QUERY HAS RETURNED A RESULT* ) {
    print "Here is list of IDs ";
    while ($query_data = $query->fetchrow_hashref) {
        print "$query_data->{id}";
    }
};

Looking for the code for "THE QUERY HAS RETURNED A RESULT" up there. I'd like to avoid using count(*) in my SQL if possible, since that will require a "group by".

like image 331
Luke The Obscure Avatar asked Feb 24 '23 18:02

Luke The Obscure


2 Answers

my $sth = $dbh->prepare($stmt);
$sth->execute();

my $header = 0;
while (my $row = $sth->fetchrow_hashref) {
    print "Here is list of IDs:\n" if !$header++;
    print "$row->{id}\n";
}

Alternative:

my $sth = $dbh->prepare($stmt);
$sth->execute();

my $row = $sth->fetchrow_hashref;
print "Here is list of IDs:\n" if $row;
while ($row) {
    print "$row->{id}\n";
    $row = $sth->fetchrow_hashref;
}

Simpler code at the expense of memory:

my $ids = $dbh->selectcol_arrayref($stmt);

if (@$ids) {
    print "Here is list of IDs:\n";
    print "$_\n" for @$ids;
}
like image 177
ikegami Avatar answered Feb 26 '23 07:02

ikegami


Looks to me like your check for the query result is redundant. Your while loop will evaluate 'false' if there is no row to fetch.

like image 36
Wedge Martin Avatar answered Feb 26 '23 07:02

Wedge Martin