重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめまして。
商品データベースのカタログ表示の際のSQLの質問です。
www.amazon.co.jp のサイトでは、ある商品を選択すると、「この商品を買った人は、こんな商品も買っています」と表示されます。
この内部的な処理方法を教えてください。

例えば、以下のような単純なテーブルがあるとします。
●顧客テーブル
・顧客番号
・顧客名

●商品テーブル
・商品ID
・商品名
・販売単価

●注文テーブル
・注文番号
・注文日時
・顧客番号
・小計

●注文詳細テーブル
・注文番号
・注文詳細番号
・商品ID
・数量


このような設計の場合、「ある商品を買った人は、こんな商品も買っています」を実現するために
・バッチで裏で処理するのでしょうか?それとも注文のたびに処理するのでしょうか?
・どのテーブルに、保存するのでしょうか?
・どのようなSQL文になりますか?(具体的に教えてください)
また、別の適切な設計方法があるのでしょうか?

困っています・・・
お手数ですがよろしくお願い致します。

A 回答 (1件)

こんにちは。



 それは、いろいろ方法がありますよ。

 店舗の目的、つまり「客に買わせること」を考えると、本当に他の客が買ったものを表示する必要はなく、何らかのカテゴリで一致するものを表示させればいいですよね。「他の人はこんなのも一緒に買っているけど、あなたはどう?」と聞かれると、心が動くものです。
~~~
商品テーブルに「カテゴリ」を追加し、「カテゴリテーブル」を追加する。カテゴリテーブルは、必要なら自己参照して階層化する。
~~~

 次に、いくつかの商品をまとめ買いできる(たいていそうでしょうけど)なら、まとめ買いした商品を並べるようにすればいいわけです。まさしく「こんな商品も買っています」となりますね。これは「注文テーブル」と「注文詳細テーブル」から、現在買おうとしている商品コードを検索し、一緒に買ったものをもう一度検索すればいいわけです。
~~こんな感じ(未検証)
SELECT "商品テーブル"."商品名"
FROM "商品テーブル", "注文テーブル", "注文詳細テーブル" "現在の商品", "注文詳細テーブル" "一緒に買った商品"
WHERE "現在の商品"."商品ID" = [今表示している商品のID]
AND "現在の商品"."注文番号" = "注文テーブル"."注文番号"
AND "一緒に買った商品"."注文番号" = "注文テーブル"."注文番号"
AND "一緒に買った商品"."商品ID" = "商品テーブル"."商品ID"
~~Oracle9.2を想定

 1つ目と2つ目を組み合わせ、より「的確度」を高めることができます。または、2つ目でヒットがなければ1つ目で表示するという手もあります。


 また、もう一つ注意しなければならないのが特許です。簡単に思いつきそうなのでとれていないかもしれませんが、「他の人が一緒に買ったものを表示する」ことについて特許がとられていれば、同じようなことをすることはできません。または特許料を払う必要があります。


 あと、人から聞いてものを業務で使うときは、ちゃんと理解してからにしてくださいね。何らかの不具合があったとき、直すのは“あなた”なのですから。
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。
大変参考になりました。
自分の中で曖昧だった部分がすっきりと晴れました。
とても、感謝しております。

(追申)
この質問用途用のダミーなカテゴリーを使用している方も
いらっしゃるのでしょうか?(具体的なアイデアありましたらお聞かせください)
私はこんな別の方法を使っているという方がいましたらぜひお聞かせください。

お礼日時:2003/09/26 11:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す