2017-11-15 1 views
-2

Ich habe eine ‚Warenkorb‘ Tisch bekam wie folgt:generieren ‚Kunden kauften auch‘ aus der Tabelle

+----+---------+-----------+----------+----------+ 
| id | orderID | productID | quantity | status | 
+----+---------+-----------+----------+----------+ 
| 1 | 3443 |  333 |  2 | complete | 
| 2 | 3443 |  202 |  4 | complete | 
+----+---------+-----------+----------+----------+ 

Und so foreach, um eine neue Zeile wird für jeden Artikel in den Warenkorb gelegt.

Also ich möchte eine "Kunden auch gekauft" von dieser Tabelle erhalten. Ich benutze MySQL.

Wie kann ich das tun? Das ist, was ich kam mit zunächst.

SELECT * FROM `cart` WHERE `status` = 'complete' AND `productID` = '333' ORDER BY `ts` DESC 

Aber natürlich dies zeigt mir nur die Zeilen mit diesem ProduktID in Was ich wirklich will, ist die andere Produkte von Aufträgen, dass enthalten dass ProduktID .

Wie kann ich das tun?

+0

es ist nicht anny customerID in der Tabelle –

+0

Nein, ich kümmere mich um Kunden nicht ID, ich möchte nur andere Produkte finden, die die Leute in der gleichen Reihenfolge haben. Also in diesem Fall möchte ich am Ende mit der Produkt-ID '202' – Chud37

Antwort

1

Ich würde wahrscheinlich dies mit einer Selbstverknüpfung auf der cart Tabelle:

Select Distinct mapped.productID 
    From cart main 
    Join cart mapped On main.orderID = mapped.orderID 
Where main.productID != mapped.productID 
    And main.productID = 333 
+0

Das ist wirklich interessant und funktioniert, danke! – Chud37

0

Die Verwendung könnte einen IN-Filter wie diesen verwenden.

SELECT 
    productID 
    FROM 
    cart 
    WHERE 
     orderID IN(
     SELECT 
      orderId 
     FROM 
      cart 
     WHERE 
      productID = 333 
      AND 
      status = 'complete' 
     ) 
    AND 
     productID <> 333 
    AND 
     status = 'complete' 
-1

Wenn Sie wollen, dass die Produkte in der gleichen Reihenfolge, dann können Sie durch orderID abfragen, z.B .:

SELECT * 
FROM cart 
WHERE orderID = 3443 
AND productID <> 333; 

Dies gibt Ihnen alle other Produkte, die in der gleichen Reihenfolge enthalten waren.

+0

Okay, aber wenn die Tabelle 90.000 Zeilen, wie wird mir das helfen? Bestellnummern interessieren mich nicht. – Chud37

+0

Welche anderen Nummern? Unabhängig davon, wie viele Zeilen in der Tabelle vorhanden sind, gibt diese Abfrage nur die Produkte zurück, die in der Bestell-ID '3443' enthalten waren. –

1

Es gibt bereits zwei richtige Antworten. Ich versuche nur, Ihnen eine Vorstellung von der Reihenfolge (oder der Wichtigkeit) von productID zu geben, die Sie zeigen. Sie könnte zum Beispiel eine Abfrage wie diese, die Anzahl der mit einem bestimmten ProduktID gekauft wurde (ausgenommen ‚ts‘):

SELECT `productID`, COUNT(*) AS RC 
FROM `cart` 
WHERE `orderID` IN (SELECT `orderID` FROM `cart` WHERE `productid`=333 AND `status` = 'complete')      
AND `productID` <> '333' 
GROUP BY `productID` 
ORDER BY RC DESC 
Verwandte Themen