2012-07-13 70 views
2

我有3個表,每一個給定類型的產品評論的評論不同的表, 即reviewshirts,reviewcoats,reviewpants 所有表的列的用戶ID,和一個itemid。 給定一個表中的itemid,查詢其他表中的產品組合的優化方式是什麼,用戶使用該itemid檢查了該項目,並根據組合出現的次數進行分組,從而進行查詢。優化的SQL查詢來計算產品中具有來自同一用戶

例如: 給出從reviewshirts表, 'S11111' 的itemid的:

表reviewshirts:

------------------------------ 
| reviewid | itemid | userid | 
------------------------------ 
| ??? | S11111 | U1234 |  <---matches 
------------------------------ 
| ??? | S11111 | U4321 |  <---matches 
------------------------------ 
| ??? | S99999 | U5555 |  (only want userids that reviewed S11111) 
------------------------------ 

表reviewpants:(發現,通過這些用戶審查的所有項目)

------------------------------ 
| reviewid | itemid | userid | 
------------------------------ 
| ??? | P11111 | U1234 |  <---matches 
------------------------------ 
| ??? | P11111 | U4321 |  <---matches 
------------------------------ 
| ??? | P11111 | U5555 | 
------------------------------ 
| ??? | P66666 | U4321 |  <---matches 
------------------------------ 

表reviewcoats:

------------------------------ 
| reviewid | itemid | userid | 
------------------------------ 
| ??? | C11123 | U1234 | <---matches 
------------------------------ 
| ??? | C00024 | U1234 | <---matches 
------------------------------ 
| ??? | C00024 | U4321 | <---matches 
------------------------------ 

返回結果:

--------------------------- 
| pantid | coatid | count | 
--------------------------- 
| P11111 | C11123 | 1  | 
--------------------------- 
| P11111 | C00024 | 2  | 
--------------------------- 
| P66666 | C00024 | 1  | 
--------------------------- 

(由pantids和coatids的不同組合的組數從結果誰審查S11111用戶)

感謝您的幫助,您可以提供!

上下文請求: 這是基於以前的評論一個天真的推薦引擎。

+0

你在找褲子和大衣之間的搭配嗎?或者,你是否在尋找與褲子和內衣搭配的組合? – 2012-07-13 01:42:37

+0

我正在尋找褲子和大衣的組合,基於襯衫表中的用戶名。 – zenithius 2012-07-13 01:55:47

+0

。 。這是我的理解,我只是想確定。這是用於某種市場購物籃分析或推薦引擎嗎? – 2012-07-13 02:04:48

回答

1

我想你正在尋找其他兩個表中的產品對。如果是這樣,下面的查詢似乎是你在找什麼:

select rp.pantid, rc.coatid, count(*) as cnt_pairs, 
     count(distinct rs.userid) as cnt_users 
from ReviewShirts rs join 
    ReviewPants rp 
    on rs.userid = rp.userid join 
    ReviewCoats rc 
    on rs.userid = rc.userid 
where rs.itemid = <whatever> 
group by rp.pantid, rc.coatid 

最後一列,cnt_users,是你想要的值。

這似乎是一個不尋常的問題。你可以編輯這個問題來給出一些想法如何使用?

+0

這非常有效!謝謝! – zenithius 2012-07-13 02:25:27