2

我有 3 个表,每个表都有给定类型产品的评论,即 reviewshirts、reviewcoats、reviewpants 所有表都包含用户 ID 和项目 ID 的列。给定一个表中的 itemid,查询其他表中的产品组合的优化方法是什么,这些组合由使用该 itemid 审阅项目的用户审阅,按该组合出现的次数分组。

例如:给定 reviewshirts 表中的 itemid 'S11111':

表评论衬衫:

------------------------------
| 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
------------------------------

表评论外套:

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

返回结果:

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

(根据评论过 S11111 的用户的 pantids 和 coatids 的不同组合数量对结果进行分组)

感谢您的任何帮助,您可以提供!

所要求的上下文:这是基于先前评论的幼稚推荐引擎。

4

1 回答 1

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 是您想要的值。

这似乎是一个不寻常的问题。您可以编辑问题以说明如何使用它吗?

于 2012-07-13T01:46:29.740 回答