2015-03-02 50 views
0

基本上我目前在做一個推薦系統,我的網站檢索從MySQL另一個數據項推薦

我有4個表中的MySQL數據庫:

用戶

  • 用戶ID
  • 用戶名
  • 密碼
  • userLevel

類別

  • 的categoryID

項目

  • ITEMID
  • 價格
  • 的categoryID
  • 描述

交易

  • TRANSACTIONID
  • 的categoryID
  • ITEMID
  • 的userID

因此,這是我怎麼想它的工作原理,

用戶ID 1(凱爾)購買筆記本電腦(項ID 1),鼠標(項ID 2)和電池(條目ID 4)

用戶ID 2(史蒂芬)購買筆記本電腦(ITEMID 1)

用戶ID 3(喬納森)購買小鼠(項ID 2),電池(項目Id 4),和鼠標墊(條目標識號3)

我希望系統建議ITEMID 2(鼠標) ,itemID4(電池)和ItemID 3(鼠標墊)到userID 2(Steven)

  • 交易表將記錄所做的任何交易。

任何幫助給予高度讚賞。謝謝

+0

你能否給我們多一點測試數據,讓你的問題更清晰... – 2015-03-02 10:53:08

+0

已經是先生..我真的不知道如何做到這一點......真的很感謝你的幫助謝謝 – Foster 2015-03-02 10:56:33

回答

0

查詢所做的是得到所有UserID's買了ItemID=2。然後由這些用戶獲取ItemID。然後應用過濾器從結果中刪除ItemId =2.嘗試以下操作。

Select distinct ItemID 
FROM transaction 
where UserID IN (Select userID FROM Transaction where itemID = 2) 
AND ItemID <> 2 
+0

你好,先生,謝謝你的幫助 我可以問你一些問題,什麼是<>用於?謝謝 – Foster 2015-03-02 10:58:18

+0

因此,在這種情況下,相同的ItemID將不會被選中2.這是'不等於'運算符。 – 2015-03-02 10:59:41

+0

哦,我看到我看到 謝謝先生!我會嘗試查詢,謝謝! – Foster 2015-03-02 11:04:50

0

像這樣

SELECT 
    i.itemID, 
    i.name, 
    u.username 
FROM transaction 
    INNER JOIN user u ON (u.userID = t.userID) 
WHERE u.userID = 2 

然後,你必須與你的語言將結果轉換爲可讀線工作。

否則,您必須查找「PIVOT」以將多個購買的商品(多行)轉換爲單行。

另一個解決方案是使用mssql的事務,允許解析結果並返回一行。

+0

這應該如何給OP什麼他想要的。您當前的查詢不會給出OP所需的輸出。在發佈回答之前檢查查詢。 – 2015-03-02 11:02:57

+0

你好先生,謝謝你的回覆 Iam與你的「我」和「你」混淆。這實際上是什麼意思? 謝謝 – Foster 2015-03-02 11:04:08

+0

我瞭解OP需要一個特定用戶進行的交易列表。他想要別的東西嗎? @Foster:在(事務和用戶)表中都放置了相同的字段「userID」。查詢時,必須在數據庫中指定使用此字段時要定位的表。 – jeremyb 2015-03-02 11:10:03