Shopsystem ShopPilot

ShopPilot => SSP - Shop Server Pages => Thema gestartet von: dobra am Dezember 31, 2010, 10:32:03

Titel: Anzahl der Varianten auf Artikelseiten auslesen?
Beitrag von: dobra am Dezember 31, 2010, 10:32:03
Hallo,

Ich möchte auf bestimmten Seiten auf denen mehrere Artikel mit Varianten liegen gerne die Anzahl der Varianten statt der Artikelanzahl ausgeben.
(bei Detailseiten wo es nur einen Artikel gibt war das einfach aber auf Artikelseiten mit variabler Artikelanzahl schaffe ich es nicht...)

wie muss ich da das sub (in location.ipl) schreiben?
sub itemcount {
    my %pageinfo = ssp::getCurrentPageInfo();
    my $catid = $ssp::pgid;
    if ($catid <10 or $catid > 1200000000){
        return;
    }
    if (($pageinfo{pagetype} >= 11) && ($pageinfo{pagetype} <= 17)){
        return;
    }
    
    my %pages = ();
    
    ssp::getChildCategoriesRecursive ($catid, \%pages);
    
    my @keys = keys %pages;
    my $pre = ssp::db_get_prefix();
    my $TABLE = $pre . "ITEM";
    my $counter = scalar(@keys);
    my $sqlstring = qq |SELECT COUNT(*) FROM $TABLE WHERE |;
        
     $sqlstring .= qq| PGID IN (|. join(",", @keys) .qq|)|;
                    
    ssp::readSQLData($sqlstring, "COUNT");
    my $count = ssp::get_var_db("COUNT", 0);
    main::mprint qq|            
<span class="text_before_items">$text_before_count</span><span class="count">$count</span> <span class="text_count">$text_items</span><span class="text_after_count">$text_after_count</span>
    |;
    
}
gibt ja nur die Artikelanzahl
Habe - erfolglos - alle möglichen "intuitiven" Varianten versucht, aber dazu reichen meine SQL-Kenntnisse mal wieder nicht  :'(

mit
   my @keys = keys %pages;
    my $pre = ssp::db_get_prefix();
    my $TABLE = $pre . "ITEM";
    my $TABLE2 = $pre . "SITM";
    my $counter = scalar(@keys);
    my $sqlstring = qq |SELECT ITEMID FROM $TABLE WHERE |;
        
     $sqlstring .= qq| PGID IN (|. join(",", @keys) .qq|)|;
                    
    my $read = ssp::readSQLData($sqlstring, "ITEMID");
my $count2;
for (my $i = 0; $i < $read; $i++) {
my $test = ssp::get_var_db("ITEMID", $i);
my $sqlstring2 = qq |SELECT COUNT(*) FROM $TABLE2 WHERE MITEMID = '$test'|;
   ssp::readSQLData($sqlstring2, "COUNT");
$count2 .= ssp::get_var_db("COUNT", 0);
}
bekomme ich nur die Teilmengen
(9 10 4 9 5 6 5 7 3 7 5 8 Artikel)
ich komme nicht drauf, wie ich da jetzt sie SUMME der gefundenen Varianten ausgeben kann.

mit
SELECT SUM(COUNT(*)) FROM $TABLE2
kommt x mal wiederholt
[Fri Dec 31 10:24:58 2010] iboshop.cgi: DBD::ODBC::st execute failed: [MySQL][ODBC 3.51 Driver][mysqld-5.0.67-community-nt]Invalid use of group function (SQL-HY000)(DBD: st_execute/SQLExecute err=-1) at Ibodata.pm line 1969.

und
my $summe=0;
for (my $i = 0; $i < $read; $i++) {
my $test = ssp::get_var_db("ITEMID", $i);
my $sqlstring2 = qq |SELECT COUNT(*) FROM $TABLE2 WHERE MITEMID = '$test'|;
   ssp::readSQLData($sqlstring2, "COUNT");
$count2 .= ssp::get_var_db("COUNT", 0);
$summe=$summe+$i;
}
bringt falsche Zahlen


ERLEDIGT

falsch
$count2 .= ssp::get_var_db("COUNT", 0);
richtig
$count2 += ssp::get_var_db("COUNT", 0);
bringt das korrekte Ergebnis  :)