2

私は 3 つのテーブルを持っており、それぞれに特定のタイプの製品 (レビュー シャツ、レビュー コート、レビュー パンツ) のレビューが含まれています。すべてのテーブルには、ユーザー ID とアイテム ID の列が含まれています。あるテーブルの itemid が与えられた場合、その itemid を持つアイテムをレビューしたユーザーによってレビューされた他のテーブルの製品の組み合わせを、その組み合わせが表示された回数でグループ化してクエリする最適な方法は何ですか。

例: reviewshirts テーブル 'S11111' から itemid が与えられた場合:

テーブル レビューシャツ:

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

テーブル レビューパンツ: (それらのユーザーによってレビューされたすべてのアイテムを見つけます)

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

他の 2 つのテーブルで製品のペアを探していると思います。もしそうなら、次のクエリはあなたが探しているもののようです:

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 に答える