[ic] Problem with "Others who........" (resend in hope of an answer this time)

Eros Shop info at eros-shop.co.uk
Sat Mar 13 07:39:36 EST 2004


Hi Everyone,

OK so my first post of this problem was _completely_ ignored, so I'm trying 
again.

Please note that I am happy to provide any extra information if it will help

I seem to be having a strange problem with the "Generate Others Who...." 
link on the merchandising page in the UI for 4.8.7 in that it seems to stop 
after processing 50 orders/orderlines :(

The error log is less than helpful:

supercow.vwe.net SpIKgoQC:vwe.net - [11/March/2004:12:20:28 +0000] eros 
/cgi-bin/eros/admin/build_related.html Error saving matches:

Yup that's it, doesn't say what the error is just that there is one :(

I've fiddled with the build_related.html to print out what's going on 
whilst it's working

The page claims to be using this select statement:

         select code,order_number,sku,username from orderline

I then have it print out the order numbers it finds, which looks like this:

EROS00000124:
EROS00000264:
EROS00000029:
EROS00000089:
EROS00000008:
EROS00000148:
EROS00000221:
EROS00000073:
EROS00000207:
EROS00000228:
EROS00000289:
EROS00000301:
EROS00000178:
EROS00000251:
EROS00000037:
EROS00000097:
EROS00000076:
EROS00000110:
EROS00000170:
EROS00000302:
EROS00000215:
EROS00000348:
EROS00000356:
EROS00000369:
EROS00000370:
EROS00000373:
EROS00000312:
EROS00000164:
EROS00000023:
EROS00000143:
EROS00000062:
EROS00000269:
EROS00000283:
EROS00000128:
EROS00000087:
EROS00000201:
EROS00000261:
EROS00000342:
EROS00000367:
EROS00000078:
EROS00000306:
EROS00000291:
EROS00000010:
EROS00000077:
EROS00000150:
EROS00000196:
EROS00000255:
EROS00000369:
EROS00000207:
EROS00000353:

353 is the 50th line in the orderline DB that it encounters ( i know this 
to be the case as I've exported it and loaded it into excel to see which 
order things happen in and these two lists match up exactly) and then for 
no fathomable reason the process stops and immediately goes on to show the 
normal results you'd expect to see if it were working properly with only 50 
order lines....

000005: times ordered=1 others_bought ==> {}
000007: times ordered=2 others_bought ==> {}
000045: times ordered=2 others_bought ==> {}
000047: times ordered=1 others_bought ==> {}
000051: times ordered=1 others_bought ==> {}
000065: times ordered=1 others_bought ==> {}
000067: times ordered=1 others_bought ==> {}
000073: times ordered=1 others_bought ==> {}
000087: times ordered=1 others_bought ==> {}
000101: times ordered=3 others_bought ==> {}
000103: times ordered=2 others_bought ==> {}
000107: times ordered=1 others_bought ==> {}
000111: times ordered=1 others_bought ==> {}
000117: times ordered=1 others_bought ==> {}
000123: times ordered=1 others_bought ==> {}
000129: times ordered=4 others_bought ==> {}
000145: times ordered=1 others_bought ==> {}
000165: times ordered=8 others_bought ==> {}
000183: times ordered=1 others_bought ==> {}
000185: times ordered=1 others_bought ==> {}
000187: times ordered=1 others_bought ==> {}
000189: times ordered=1 others_bought ==> {}
000191: times ordered=1 others_bought ==> {}
000199: times ordered=1 others_bought ==> {}
000217: times ordered=1 others_bought ==> {'000225' => "1",}
000225: times ordered=1 others_bought ==> {'000217' => "1",}
000241: times ordered=1 others_bought ==> {}
000271: times ordered=2 others_bought ==> {}
000319: times ordered=1 others_bought ==> {'000363' => "1",}
000321: times ordered=1 others_bought ==> {}
000363: times ordered=2 others_bought ==> {'000319' => "1",}
000379: times ordered=2 others_bought ==> {}

The problem is that i have 630 order lines so far spread across 373 orders. 
It doesn't take a genius to work out that there's a LOT of stuff not being 
processed here, but I'm stumped as to how to fix it.

I did find a couple of lines in orderline that didn't have a username, so I 
fixed that up hoping it was the answer but sadly it's made no difference at 
all.

The code from build_related.html is as follows (it is untouched, except for 
the extra log lines I've added):

[perl tables="__UI_META_TABLE__ orderline merchandising"]
         my $db = $Db{orderline};
         return "NO ORDERLINE table???!" if ! $db;
         my $start = tag_data( qw/__UI_META_TABLE__ lookup_exclude 
orderline/ );

         my $query = "select code,order_number,sku,username from orderline";
         if($start) {
                 $query .= " where order_number > '$start'";
         }
         else {
                 %sku = ();
         }

         my %on;            # Keep track by order number
         my %un;            # Keep track by username
         my %times_ordered; # Keep track by sku

         my $ary = $db->query( { sql => $query } );

# added by Mark
#      $out .= "$query<br>\n";

         for(@$ary) {
                 my ($line, $on, $sku, $un) = @$_;
                 push @{$un{$un} ||= []}, $sku;

# added by Mark
#               $out .= "$line:<br>\n";
#               $out .= "$on:<br>\n";
#               $out .= "$sku:<br>\n";
#               $out .= "$on:<br>\n";

                 $times_ordered{$sku}++;
         }
         for(keys %un) {
                 my $ref = $un{$_};
                 @ary = @$ref;
                 for(@ary) {
                         my $sku = $_;
                         $sku{$sku} = {} unless $sku{$sku};
                         for (@ary) {
                                 next if $_ eq $sku;
                                 $sku{$sku}->{$_}++;
                         }
                 }
         }
         my $mdb = $Db{merchandising};
         for(sort keys %sku) {
                 my $val = $Tag->uneval( { ref => $sku{$_} } );
                 $out .= "$_: times ordered=$times_ordered{$_} 
others_bought ==> $val<br>\n";
                 $mdb->set_field($_, 'others_bought', $val );
                 $mdb->set_field($_, 'times_ordered', $times_ordered{$_} );
         }
         return $out;
[/perl]

Does anyone have any ideas why this isn't working in the way it should? I'm 
feeling that something is wrong in the orderline DB, yet I'm not able to 
find it. It's that or I'm hitting some kind of limit, but I'm not able to 
find that as a setting/default either :(

In the mean time I am manually entering stuff into the merchandising table 
for each order we process. This is very laborious and I would like to take 
advantage of the supplied link so that my time can be better spent on other 
things.

My ideal solution to this problem would be to use an external perl script 
on a cron job that updates the merchandising table/txt file, but I'm happy 
to click the link a few times per week if needs be until a better solution 
can be found :)

Anyway, I've had a good root about in the archives on google and sadly all 
the issues I found seemed to be related to permissions problems or 
excluding canceled order, which don't apply here.

I'm sure this has to be something silly/simple!

Many thanks in advance for any suggestions/help

Mark

P.S. At worst, I'm prepared to pay someone to solve this problem (and 
implement it) and will consider any serious and reasonable offers.



Eros Shop
vwe internet ltd
PO BOX 1067
SLOUGH
SL1 7YA
UK

Shop - http://www.eros-shop.co.uk
EMail - info at eros-shop.co.uk
Tel - 0870 737 3369
Fax - 0870 737 4469




More information about the interchange-users mailing list