Künstliche Intelligenz (KI) als Hobby / Artificial Intelligence (AI) as a Hobby

Facebook Gruppe: Künstliche Intelligenz (KI) als Hobby

PHP Warenkorbanalyse / PHP shopping basket analysis

Mit dieser Warenkorbanalyse in PHP werden zu einem Artikel weitere Artikel empfohlen, die bereits oft zusammen gekauft wurden. (vgl. Amazon)

Schritt 1: Aufträge mit Stückliste aufbereiten

In diesem Beispiel werden alle Aufträge mit Ihren einzelnen Positionen als Artikelnummer in einer einfachen Tabelle (MySQL) zur Verfügung gestellt.

Dabei hat jede Zeile eine ID, unter der eine Auftragsnummer (Order ID) und eine Artikelnummer (Article ID) als Paar abgelegt sind.

In Auftrag 1 wurden z.B. die Artikel 1 und 2 bestellt usw...

ID ; Order ID ; Article ID

//Step1: Show complete Result Set from Database
$result = mysql_query("SELECT * FROM warenkorbanalyse ORDER BY orderid ASC");
echo " table border= '1'>";
echo " tr> td>ID /td> td>Order ID /td> td>Article ID /td> /tr>";
	while ($row = mysql_fetch_assoc($result)) {
		echo " tr> td>".$row["id"]." /td> td>".$row["orderid"]." /td> td>".$row["articleid"]." /td> /tr>";
	};
echo " /table>";

Step1: Show complete Result Set from Database

IDOrder IDArticle ID
111
212
322
421
533
632
743
844
942
1055
1156

Schritt 2: Liste der Aufträge filtern

Im zweiten Schritt filtern wir nun aus unserer Datenbasis nur die einzelnen Auftragsnummern (Order IDs)

//Step 2: Show only the DISTINCT OrderIDs
$resultOrderIDs = mysql_query("SELECT DISTINCT orderid FROM warenkorbanalyse ORDER BY orderid ASC");
echo " table border= '1'>";
echo " tr> td>Order ID /td> /tr>";
	while ($row = mysql_fetch_assoc($resultOrderIDs)) {
		echo " tr> td>".$row["orderid"]." /td> /tr>";
	};
echo " /table>";

Step 2: Show only the DISTINCT OrderIDs

Order ID
1
2
3
4
5

Schritt 3: Artikel pro Auftrag

Dann sortieren wir aus der Datenbasis alle Artikelnummern zu den jeweiligen Aufträgen und zeigen an, welche Artikel in welchem Auftrag enthalten sind.

//Step 3: Show all ArticleIDs in one OrderID
$resultOrderIDs = mysql_query("SELECT DISTINCT orderid FROM warenkorbanalyse ORDER BY orderid ASC");
echo " table border= '1'>";
echo " tr> td>Order ID /td> td>Article IDs /td> /tr>";
	while ($row = mysql_fetch_assoc($resultOrderIDs)) {
		$orderid = $row["orderid"];
		echo " tr> td>".$orderid." /td> td>";
		$resultArticlesInOrder = mysql_query("SELECT * FROM warenkorbanalyse WHERE orderid = '$orderid' ORDER BY articleid ASC");
		while ($row2 = mysql_fetch_assoc($resultArticlesInOrder)) {
			echo $row2["articleid"]."   ";
		};
		echo " /td> /tr>";
	};
echo " /table>";

Step 3: Show all ArticleIDs in one OrderID

Order IDArticle IDs
11 2
21 2
32 3
42 3 4
55 6

Schritt 4: Array mit Artikelnummer Kombinationen anhand der Aufträge erstellen

Jetzt beginnt der interessante Teil der Warenkorbanalyse.

Es wird ein neues 2-dimensionales Array geschaffen, in dem der 1. Schlüssel eine Artikelnummer ist, der 2. Schlüssel eine zweite Artikelnummer aus dem selben Auftrag ist und dessen Wert dann bei jeder gleichen Artikelkombination um +1 erhöht wird. Das bedeutet, dass diese Artikelkombination in den Aufträgen der Datenbasis +1 mal oft aufgetreten ist.

Es wird folgendes durchlaufen:

Aufträge: Alle Artikel pro Auftrag werden durchlaufen und die Artikelkombinationen werden in dem neuen Array geprüft.

Gibt es diese Artikelkombination bereits, wird diese +1 gesetzt.

Gibt es diese Artikelkombination noch nicht, wird diese mit Schlüssel 1 und 2 neu angelegt, mit dem Wert = 1.

//Step 4: Create new Array with ArticleID combinations per OrderID
$resultOrderIDs = mysql_query("SELECT DISTINCT orderid FROM warenkorbanalyse ORDER BY orderid ASC");
$ArticleCorrelations = array();
$PreviousOrderid = "";
	while ($row = mysql_fetch_assoc($resultOrderIDs)) { // Pro Schritt 1 OrderID
		$orderid = $row["orderid"];

		$resultArticlesInOrder = mysql_query("SELECT * FROM warenkorbanalyse WHERE orderid = '$orderid' ORDER BY articleid ASC");
		while ($row2 = mysql_fetch_assoc($resultArticlesInOrder)) { // Pro Schritt 1 Article ID
		$Article1 = $row2["articleid"];
		
			while ($row3 = mysql_fetch_assoc($resultArticlesInOrder)) { // Pro Schritt eine weitere ArticleID aus der Order
				$Article2 = $row3["articleid"];
				if ($Article1 != $Article2) {$ArticleCorrelations[$Article1][$Article2] = $ArticleCorrelations[$Article1][$Article2]+1;}; 
				
			};
		};
	};

echo " pre>";
print_r($ArticleCorrelations);
echo " /pre>";

Step 4: Create new Array with ArticleID combinations per OrderID

Array
(
    [1] => Array
        (
            [2] => 2
        )

    [2] => Array
        (
            [3] => 2
            [4] => 1
        )

    [5] => Array
        (
            [6] => 1
        )

)

Schritt 5: Neues Array mit Artikelkombinationen anzeigen

//Step 5: Show 2 dimensional Array
echo " table border= '1'>";
echo " tr> td>Article /td> td>with Article /td> td>bought together /td> /tr>";
foreach($ArticleCorrelations as $key => $value){
	foreach($value as $key2 => $value2){
        echo " tr> td>".$key." /td> td>".$key2." /td> td>".$value2." x /td> /tr>";
	};
};
echo " /table>";

Step 5: Show the Array from Step 4 more beautiful

Articlewith Articlebought together
122 x
232 x
241 x
561 x

Schritt 6: Schreibe das neue Array in eine neue Datenbank

Wenn alle Aufträge durchlaufen worden sind, können die Artikelkombinationen aus Schritt 5 in eine neue Datenbank geschrieben werden, um später für Empfehlungen zur Verfügung gestellt zu werden.

//Step 6: Insert all Combinations in a second Database
mysql_query("TRUNCATE TABLE `warenkorbanalyse2` ");
foreach($ArticleCorrelations as $key => $value){
	foreach($value as $key2 => $value2){
		mysql_query("INSERT INTO warenkorbanalyse2 (article1, article2, combinations) VALUES ('$key', '$key2', '$value2')");
	};
};

Step 6: Insert the Table (from Step 5) in a second Database

Schritt 7: Wenn ich Artikel X bestelle, was wurde damit oft zusammen bestellt?

Jetzt kann aus der neuen Datenbank einfach angezeigt werden, welche anderen Artikel mit dem von mir bestellten Artikel oft zusammen gekauft wurden:

Step 7: Show recommended Articles ordered by Relevance, selected from second Database (limited to 10)

Article ID:
If you buy Articlerecommended Articles ordered by Relevance:
21
23
24