It all works great until I added a second variable (ts) to the first
MYSQL Select statement. Then I get multiple valuse for ts instead of
one.
---------------
#!/usr/bin/perl
use DBI;
#Declare arrays to hold results
my @data;
my @data2;
my (@requests) = ();
my (@bids) = ();
# Database information
$db="X";
$host="X";
$port="X";
$userid="X";
$passwd="X";
$connectionInfo="DBI:mysql:database=$db;$host:$port";
# Make connection to database
$dbh = DBI->connect($connectionInfo,$userid,$passwd) or die "Couldn't
connect to db. " . $sth->errstr;
# Prepare and execute query
$query = "SELECT id, ts FROM insrequest WHERE status=0 ORDER BY id";
$sth = $dbh->prepare($query);
$sth->execute()or die "Couldn't execute statement. " . $sth->errstr;
# Read the matching records and print them out.
while (@data = $sth->fetchrow_array()) {
my $id = $data[0];
push(@requests, [@data]);
# print "Row: @data\n";
}
if ($sth->rows == 0) {
print "No jobs found.\n\n";
}
# Second query
$query2 = "SELECT DISTINCT jobnum FROM insbid1 ORDER BY jobnum";
$sth = $dbh->prepare($query2);
$sth->execute()or die "Couldn't execute statement. " . $sth->errstr;
# Read the matching records and print them out.
while (@data2 = $sth->fetchrow_array()) {
my $jobnum = $data2[0];
push(@bids, [@data2]);
}
if ($sth->rows == 0) {
print "No bids found insbid1.\n\n";
}
$sth->finish();
# Disconnect from database
$dbh->disconnect;
# Comparison
print "Not found:\n";
my %chk;
for my $x (0..$#bids) {
for my $y (0..$#{$bids[$x]}) {
$chk{$bids[$x][$y]} = 1;
}
}
for my $i (0..$#requests) {
for my $j (0..$#{$requests[$i]}) {
print "\t$requests[$i][$j]\n" unless $chk{$requests[$i][$j]};
}
}
----------
Matt Garrish:
Matt Garrish said:
Taxi Driver said:
Hi Everyone -
Can I get your help with this, it is driving me crazy.
I have 2 arrays listed below:
@req[0][0]=75
What are these things? Did you mean to write $req[0][0]? If so, please bear
in mind that you should always post real code.
@req[1][0]=76
@req[2][0]=77
@req[2][0]=78
Why are you using multi-dimensional arrays when there is only one entry for
each? Or are there more entries? It's hard to give you useful help if you
don't present the problem clearly (like why you repeated @req[2][0], for
example).
---
@bid[0][0]=75
@bid[1][0]=76
@bid[2][0]=80
I need to find all cases where a number in @req is NOT in @bid. In
this example 77 and 78.
Hashes are your friend in situations like this. Assuming you have a real
mutlidimensional array (and all the entries in @bid and @req contain
references to arrays):
my %chk;
for my $x (0..$#bid) {
for my $y (0..$#{$bid[$x]}) {
$chk{$bid[$x][$y]} = 1;
}
}
for my $i (0..$#req) {
for my $j (0..$#{$req[$i]}) {
print "Not found: $req[$i][$j]\n" unless $chk{$req[$i][$j]};
}
}
Matt