[Date Prev][Date Next][Thread Prev][Thread Next][Interchange by date
][Interchange by thread
]
[ic] Tag->data for mulitple keys
Kevin Walsh wrote:
>>Is there a method to use Tag->data for finding a row based on multiple
>>keys with the GDBM database? I've seen nice solutions for SQL... If
>>not the tag, any other suggestions?
>>
>>
>>
>I suggest the [query] tag with SQL. The SQL::Statement module will
>handle queries such as "SELECT foo FROM bar WHERE a = 1 AND b = 2"
>against GDBM tables.
>
>Do yourself a favour and move your GDBM data into MySQL or PostgreSQL.
>
>
Advise well appreciated and heeded next time...
Ok, here is the code snippet:
my $sql = "select discount from tiers where tier ='" . $tier ."' and
quantity>=" . $quantity ." order by quantity desc";
#here you must use the wantarray => 1, cause the documentation says so :)
#The documentation also says that using that will return an arrayref of your
#results, a hashref of the column names, and an arrayref of the column
names.
my ($results,$colname_hashref,$colname_arrayref) = $Tag->query({
wantarray =>1,sql => $sql, } );
#take the arrayref, and convert to an array @results, which is an array
#of arrayrefs.
my @results = @{$results};
my $return;
foreach my $ref (@results) {
my @tmp = @{$ref}; #dereference each arrayref
foreach my $test (@tmp) { #@temp now holds actual (dereferenced) results
$return .= "$test\n";
}
}
#just for debug:
$Tag->Log("Tier_Pricing: return: " . $return);
$factor=$return;
$Tag->Log("Tier_Pricing: Ending: sku: " . $sku . ", tier: " . $tier .
", quantity: " . $quantity . ", factor: " . $factor .
", pricing: " . $price);
which is returning in the $return variable, all records that match the
$tier regardless of the quantity.
Another oddity, is that if I take the descending off the select, the
order is in proper descending order, still all fifteen records that
match at the $tier, but the sort order is in reverse.
Additionally, in the catalog error.log, I'm seeing this:
mml2.mmaz.com 5xfUbemU:mmaz.com - [27/August/2002:18:17:27 -0700] mmb2c
/cgi-bin
/mmb2c/ATT-0298-03-SMA-02.html Safe: Can't locate object method "query"
via pack
age "Vend::Table::GDBM" (perhaps you forgot to load
"Vend::Table::GDBM"?) at /ib
in/interchange/lib/Vend/Interpolate.pm line 5235.
>
> $Tag->Tier_Pricing( $item->{code}, $item->{quantity} )
>
even though the CommonAdjust of:
CommonAdjust "& $Tag->Tier_Pricing( $item->{code}, $item->{quantity} )"
does appear to be called, otherwise I'd never get the results captured
in my debug file:
Log: Tier_Pricing: Startup: sku: ADT-2840-NF-SMF-02, quantity: 1
Log: Tier_Pricing: return: 0.48
0.60
0.72
0.88
0.51
0.63
0.95
0.78
0.54
0.45
0.57
0.67
0.80
0.98
1.00
Log: Tier_Pricing: Ending: sku: ADT-2840-NF-SMF-02, tier: T2, quantity:
1, factor: 0.48
0.60
0.72
0.88
0.51
0.63
0.95
0.78
0.54
0.45
0.57
0.67
0.80
0.98
1.00
, pricing: 78.80
Anyway, I'm grabbing a quick bite with my wife before she shoots me...
Barry