Moin nochmal!
Ich habe mich jetzt ein wenig mit den Sourcodes auseinander gesetzt und musste dabei folgendes feststellen: Der Query zur Ausgabe der Artikel gibt lediglich einen Artikel zurück. Die Abfrage, die die Anzahl an Artikeln zurückgibt, beinhaltet als Zahl 11. Entsprechend werden schonmal 2 Seiten angezeigt. Beim näheren Betrachten der Select-Statements ist mir dann folgendes aufgefallen:
Abfrage der Artikel:
select oxarticles.oxid, oxarticles.oxparentid, oxarticles.oxvarstock, oxarticles.oxvarcount, oxarticles.oxstockflag, oxarticles.oxstock, oxarticles.oxprice, oxarticles.oxvat, oxarticles.oxskipdiscounts, oxarticles.oxunitquantity, oxarticles.oxshopid, oxarticles.oxtitle_1 as oxtitle, oxarticles.oxartnum, oxarticles.oxthumb, oxarticles.oxpicsgenerated, oxarticles.oxpic1, oxarticles.oxvarselect_1 as oxvarselect, oxarticles.oxweight, oxarticles.oxtprice from oxartextends inner join oxarticles on oxarticles.oxid = oxartextends.oxid where match ( oxartextends.oxtags_1 ) against( '\"mein tag in der suchmaschine\"' IN BOOLEAN MODE )
Abfrage der Anzahl:
select count(*) from oxartextends inner join oxarticles on oxarticles.oxid = oxartextends.oxid where ( ( oxarticles.oxactive = 1 or ( oxarticles.oxactivefrom < '2010-11-27 07:12:42' and oxarticles.oxactiveto > '2010-11-27 07:12:42' ) ) and ( oxarticles.oxstockflag != 2 or ( oxarticles.oxstock + oxarticles.oxvarstock ) > 0 ) and IF( oxarticles.oxvarcount = 0, 1, ( select 1 from oxarticles as art where art.oxparentid=oxarticles.oxid and ( art.oxactive = 1 or ( art.oxactivefrom < '2010-11-27 07:12:42' and art.oxactiveto > '2010-11-27 07:12:42' ) ) and ( art.oxstockflag != 2 or art.oxstock > 0 ) limit 1 ) ) ) and oxarticles.oxissearch = 1 and match(oxartextends.oxtags_1) against ( 'mein tag in der suchmaschine' IN BOOLEAN MODE )
Na? Wem fällt es noch auf? Richtig, in der ersten Abfrage wird ein Match auf ‘“mein tag in der suchmaschine”’ ausgeführt und in der Anzahl nur ‘mein tag in der suchmaschine’. Das hat natürlich zur Folge, dass bei der ersten Abfrage nur Artikel ausgelesen werden, die genau diese Reihenfolge an Stichworten beinhalten - in meinem Fall nur einer. Die zweite Abfrage fragt hingegen alle Artikel ab, die IRGENDEINEN Tag aus der “Liste” (der String halt) beinhalten - und das sind bei mit in diesem Beispiel eben 11.
Verantwortlich hierfür ist die Verwendung von:
oxDb::getDb()->quote( "\"".$sTag."\"" )
in der Methode loadTagArticles() in oxarticlelist.php. In oxutilscount.php hingegen wird in der Methode getTagArticleCount() nur folgendes verwendet:
$oDb->quote( $sTag )
Jetzt bleibt allerdings die Frage: Was ist hier richtiger? Nur die Artikel anzuzeigen, bei denen GENAU diese Tag-Folge enthalten ist oder alle, die irgeneinen Tag enthalten!? Ich habe mich jetzt vorerst dafür entschieden alle auszulesen, die irgendeinen Tag aus der Liste enthalten, aber ich würde mich freuen, wenn mir hier jemand sagen könnte, was wirklich richtiger wäre.
Außerdem stelle ich mir gerade die Frage, ob dieser “Fehler” einen Einfluss auf die Stichwort-Wolke hat!?
LG
Lutz