Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Wer dies gekauft hat, hat auch folgendes gekauft [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Wer dies gekauft hat, hat auch folgendes gekauft


 
marc26
12-04-2006, 03:38 
 
hi allerseits,

Ich möchte eine typische Amazon Empfehlung ausgeben, sprich:

Kunden, die Produkt A gekauft haben, haben auch die Produkte K, L und Z gekauft.

Kann mir im Moment noch keinen Reim darauf machen, wie das funktionieren kann.

Grds. hab ich ja eine ProduktID und eine UserID, bei jedem Kauf kann ich die ja gemeinsam in einem table speichern...

Vielleicht habt Ihr ja einmal einen Denkanstoss, oder ein paar Suchbegriffe nach denen ich mal Ausschau halten kann.

Gruss, Marc

 
Carrear
12-04-2006, 03:43 
 
Ich habe ja wirklich nur sehr wenig ahnung von PHP und so aber vielleicht hilft dir ja mein Gedanke weiter:

Ich könnte mir vorstellen, dass z.B. in einer DB gespeichert ist welcher Kunde welche Produkte gekauft hat. Jetzt verpackst du das ganze schön in ein Array (Arrayname = kunden id und die Werte sind Produkt ID) und dann suchst du (wie auch immer) nach übereinstimmungen. So weit in Ordnung?

 
marc26
12-04-2006, 04:02 
 
In die Richtung hab ich auch schon gedacht, ich glaube aber nicht, dass man den array Vergleich quasi 'live' machen sollte - könnte mir vorstellen, dass das einfach endlos dauert - nimm mal nur 100 Produkte und 100 Kunde - die Zahl der möglichen Konstellationen ist gewaltig...

 
Carrear
12-04-2006, 04:19 
 
Also ich würd das nicht live machen, wenns da so was wie durchschnittswerte im hintergrund (also permanent) berechnet, dann dauert dass bei der akuten aktion nicht wirklich lange, sind dann ja sozusagen standartisierte werte.

 
mrhappiness
12-04-2006, 08:35 
 
Warum nicht einfach in der Datenbank?

Lese die Anzahl der gekauften Artikel aus, die von Usern gekauft wurden, die auch den Artikel A gekauft haben.
Sortiere nach Anzahl der Käufe absteigend und nimm nur die ersten 3 Treffer

 
phoboslab
12-04-2006, 13:20 
 
Diese vorschläge sind meist gefaked. Zu jedem Produkt werden händisch einige Verknüpfungen (m zu n) angelegt. Das ganze wird auch "rückwärts" gelesen, dh. zu Produkt K, erscheint auch Produkt A.
also zb.:
A - K
A - L
A - Z

Natürlich kannst du diese Beziehungen auch über die bereits bestellten Produkte aufbauen, aber ich bezweifle das die Ergebnis dabei wie gewollt ausfallen.
Ich hab auf Amazon auch schon ein Buch und eine CD in einer Bestellung gehabt. Wie willst du herausfinden, ob die beiden Produkte überhaupt etwas miteinander zu haben?

 
wahsaga
12-04-2006, 13:30 
 
Original geschrieben von phoboslab
Ich hab auf Amazon auch schon ein Buch und eine CD in einer Bestellung gehabt. Wie willst du herausfinden, ob die beiden Produkte überhaupt etwas miteinander zu haben?
Die Masse macht's.

Nicht jeder kauft so wie du ein Kinderbuch und eine Porno-DVD gleichzeitig *g*

Wenn viele Leute zu "Pippi Langstrumpf" auch den "Räuber Hotzenplotz" kaufen, und viele andere zu einem "Werk" von Bolly Duster auch eins von Wina Gild - dann bist du nur ein Ausreißer, der in der Statistik in der Masse untergeht und sich nicht bemerkbar macht.

 
phoboslab
12-04-2006, 14:09 
 
Klar, Amazon könnte sich das erlauben, die haben die nötige Masse an bestellungen. Tun sie aber wahrscheinlich nicht - ich kann mir nicht vorstellen, dass viele Leute eine DVD und den Directors Cut der selben DVD gekauft haben :)

Original geschrieben von wahsaga
Nicht jeder kauft so wie du ein Kinderbuch und eine Porno-DVD gleichzeitig *g* Bösartige Unterstellung! In dem Buch gings um MySQL!

 
zonthor
12-04-2006, 15:38 
 
Ich kenne natürlich dein DB-Design nicht aber müsste doch eigentlich recht easy sein. Könnte mir etwas in der richtung vorstellen


SELECT artikel.* best_1.*, count(best_2.*) AS anz
FROM artikel, bestellungen AS best_1, bestellungen AS best_2,
WHERE best_1.artikel_id == '$artiel_a'
AND best_2.kaeufer_id IN best_1.kaeufer_id
GROUP BY best_2.artikel_id
ORDER BY anz ASC;


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:23 Uhr.