[ic] Need help with a perl query

Mark Lipscombe markl at gasupnow.com
Tue May 26 02:04:00 UTC 2009


IC wrote:
> Hi folks,
> 
> I am trying to use a piece of perl to return a list of order numbers (with
> status processing) and skus ordered, I have pasted the code below, it
> returns the list of order numbers ok from transactions but it doesn't return
> any skus from the orderline table. I also tried replacing my $lookup
> variable with a fixed orderline eg "12345-1" but it still didn't work.
> 
...
>   my $out = '';
>      foreach $row ( @$ary) {
>      my ($order_number) = @$row;
>      my $lookup = "%" . $order_number . "%";
>  
>      my $ary2 = $db2->query('select sku from
>      orderline where code like $lookup');
...

The problem is most likely you're missing quotes around $lookup, 
something like:

my $ary2 = $db2->query('select sku from orderline where code like 
"$lookup");

But assuming you're using the standard store database layout, you should 
have a field in the orderline table called order_number.  Better to use 
that, rather than a LIKE query again the code field.  Try something like:

my $ary2 = $db2->query('select sku from orderline where order_number = 
"$order_number"');

Even better would be to not do the orderline query inside a loop, but to 
instead use a RIGHT JOIN to get all that information in a single query. 
  Something like:

SELECT t.order_number, o.sku
FROM transactions t
RIGHT JOIN orderline ON o.order_number = t.order_number
WHERE t.status = 'processing'

Regards,
Mark




More information about the interchange-users mailing list