Autor Thema: mit randomitem keine doppelten Artikel ausgeben ?  (Gelesen 7702 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
mit randomitem keine doppelten Artikel ausgeben ?
« am: Mrz 11, 2013, 10:15:29 »
Hallo,

ich habe das Script von ahe
http://www.shoppilot.net/pf/shoppilot-enterprise/wechselnder-artikelinhalt-der-eingangsseite/msg1491/#msg1491
ein wenig "missbraucht" und hole mir die zufälligen Artikel für die "Empfehlungen" in der Lightbox nicht von verknüpften Artikeln sondern gefiltert nach Zuordnung aus der ITEM-Tabelle:

<!--spmacro:module(randomitem)
%RANDITEMS = ();
$curIndex = -1;
srand();
sub artikel {
my $id = ssp::get_var_article("itemid");
my $sort = ssp::get_var_article("ZUORDNUNG");

my $pre = ssp::db_get_prefix();
my $ITEM = $pre . 'ITEM';

my $count = ssp::readSQLData("SELECT ITEMID, DIMG, ARTIKELNAME, SEITE, ERG1, PRICE FROM $ITEM WHERE ZUORDNUNG = '$sort' && ITEMID <> '$id'","ITEMID","DIMG","ARTIKELNAME","SEITE","ERG1","PRICE");
if ($count >= 0) {

my $ok = 0;
my $number = 0;
my $check = 0;
while (!$ok) {
if ($check > $count) { $curIndex = -1; return; }
$number = int(rand($count));
$ok = !(defined $RANDITEMS{$number});
if ($ok) {
$RANDITEMS{$number} = 1;
$curIndex = $number;
}
$check = $check + 1;
}

$img = ssp::get_var_db("DIMG",$curIndex);
$artnr = ssp::get_var_db("ITEMID",$curIndex);
....

main::mprint qq|<div class="boxshaddow2" style="float:left; ..."> <html-code> </div>|;
}
}
-->

Funktioniert wunderbar  ;D


nur.....
selten aber doch manchmal werden Artikel doppelt ausgegeben  :(
Wie kann ich das verhindern ?

Linkback: https://www.shoppilot.net/pf/index.php?topic=1653.0
mfG
dobra

Offline ahe

  • Global Moderator
  • Sr. Member
  • *****
  • Beiträge: 435
  • Lob: 20
Re: mit randomitem keine doppelten Artikel ausgeben ?
« Antwort #1 am: Mrz 11, 2013, 13:45:21 »
Hallo dobra,

das liegt vermutlich an Artikelverknüpfungen.
Schliesse die mal aus:

my $count = ssp::readSQLData("SELECT ITEMID, DIMG, ARTIKELNAME, SEITE, ERG1, PRICE FROM $ITEM WHERE ZUORDNUNG = '$sort' AND ITEMID <> '$id' AND XISLINK <> '1'","ITEMID","DIMG","ARTIKELNAME","SEITE","ERG1","PRICE");
MfG ahe

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: mit randomitem keine doppelten Artikel ausgeben ?
« Antwort #2 am: Mrz 11, 2013, 13:54:08 »
Hallo ahe,

Danke - das war's vermutlich wirklich.
(lokal) 25x Seite mit wenigen Zufallsartikeln aufgerufen - keine einzige Doppelausgabe.
Bei der selben Seite online (noch nicht korrigierte Abfrage) - bei jedem 3 - 4 Aufruf ein Artikel doppelt.

Offline ahe

  • Global Moderator
  • Sr. Member
  • *****
  • Beiträge: 435
  • Lob: 20
Re: mit randomitem keine doppelten Artikel ausgeben ?
« Antwort #3 am: Mrz 11, 2013, 14:07:01 »
Was mir auch gerade auffällt.
Ich würde die beiden Buttons anders herum positionieren.
Also "zum WK" rechts und "weiter einkaufen" nach links.
Das ist die übliche Variante die Buttons zu positionieren.
Innerhalb des Bestellvorgangs klickst du ja auch rechts um mit der Bestellung zu starten / fortzufahren.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: mit randomitem keine doppelten Artikel ausgeben ?
« Antwort #4 am: Mrz 11, 2013, 14:20:04 »
Hast recht - ist irgendwie logischer
(hatte das so von einem großen AT-Versandhaus nachgebaut ;) )
werde ich Abend zu Hause ändern

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: mit randomitem keine doppelten Artikel ausgeben ?
« Antwort #5 am: Mrz 11, 2013, 21:27:11 »
In meinem Script wird für jeden Artikel eine DB-Abfrage gesendet.

Vorteil:  
die Anzahl der ausgegebenen Artikel ist flexibel.
Man schreibt für jeden Artikel der ausgegeben werden soll 1x  __randomitem::artikel__
im Beispiel sollen 4 Artikel angezeigt werden, also
__randomitem::artikel__ __randomitem::artikel__ __randomitem::artikel__ __randomitem::artikel__
Nachteil:
ist eben, dass für jedes __randomitem::artikel__  eine neue DB-Abfrage abgeschickt werden muss

Wenn eine bekannte/gleichbleibende Artikelanzahl verwendet wird, geht das auch eleganter  8)
Danke an hop der mir den Hinweis gegeben hat, dass mein Script so nicht optimal ist wegen der unnötig vielen DB Zugriffe
... und Danke an Tante google die mir das "ORDER BY RAND() LIMIT" verraten hat ;)

<!--spmacro:module(randomitem)
sub artikel {
my $id = ssp::get_var_article("itemid");
my $sort = ssp::get_var_article("ZUORDNUNG");

my $pre = ssp::db_get_prefix();
my $ITEM = $pre . 'ITEM';

my $count = ssp::readSQLData("SELECT ITEMID, DIMG, ARTIKELNAME, SEITE, ERG1, PRICE FROM $ITEM WHERE ZUORDNUNG = '$sort' && ITEMID <> '$id' AND XISLINK <> '1' ORDER BY RAND() LIMIT 4","ITEMID","DIMG","ARTIKELNAME","SEITE","ERG1","PRICE");
  if ($count >= 0) {
 my $i=0;
while ($count > $i) {
$img = ssp::get_var_db("DIMG",$i);
$artnr = ssp::get_var_db("ITEMID",$i);
...

main::mprint qq|<div class="boxshaddow2" style="float:left; ..."> <html-code> </div>|;
++$i;
}
}
}
-->

mit
ORDER BY RAND() LIMIT 4  ## <- hier für 4 Artikel
wird die Anzahl der zufälligen Artikel festgelegt und dann mit nur einer DB-Abfrage und nur einmal
__randomitem::artikel__
die gewünschte Artikelanzahl ausgegeben.


xx
keine Versandkosten für bestimmte Artikel?

Begonnen von dobra

6 Antworten
8437 Aufrufe
Letzter Beitrag Mrz 10, 2007, 14:17:10
von dobra
xx
__myrabatt__ nicht für bestimmte Artikel && auch keine anderen Rabatte

Begonnen von dobra

1 Antworten
5159 Aufrufe
Letzter Beitrag Juni 20, 2009, 10:39:44
von dobra
xx
Artikel befristet als Aktion ausgeben

Begonnen von dobra

0 Antworten
4111 Aufrufe
Letzter Beitrag September 19, 2015, 19:31:34
von dobra
xx
Anzahl Artikel in Unterkategorieen ausgeben

Begonnen von admin

0 Antworten
5502 Aufrufe
Letzter Beitrag November 17, 2009, 16:35:58
von admin