その他 > その他 > ランキングSQL |
その他
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
lvsa |
投稿日時: 2009/10/29 12:16
対応状況: −−−
|
一人前 登録日: 2009/10/6 居住地: 投稿: 104 |
Re: ランキングSQL pinerayさま
いつもありがとうございます。 スゴイですね!!完璧です。 意図した通りの結果が得られました。 もっとSQL勉強しなくては・・ ホントに助かりました。ありがとうございます。 |
pineray |
投稿日時: 2009/10/29 12:04
対応状況: −−−
|
長老 登録日: 2006/9/9 居住地: 伊賀 投稿: 292 |
Re: ランキングSQL オススメ商品ブロックを参考にSQLを作成してみました。
取得するカラム名が変わっているので、そこは適宜修正してください。
|
lvsa |
投稿日時: 2009/10/29 11:52
対応状況: −−−
|
一人前 登録日: 2009/10/6 居住地: 投稿: 104 |
Re: ランキングSQL pinerayさま
ご指摘ありがとうございます。 確かに現状のSQLだと、規格数によって 結果が違ってしまいますね・・。 ん〜・・何か良いSQLが思いつきません。 もう少し格闘してみます。 |
pineray |
投稿日時: 2009/10/28 19:22
対応状況: −−−
|
長老 登録日: 2006/9/9 居住地: 伊賀 投稿: 292 |
Re: ランキングSQL 水を差すようで大変申し訳ないのですが、上記のSQLだと、
商品に複数の規格が登録されている場合、count 項目に記録される値が 「dtb_order_detailテーブルにあるproduct_idの数×規格数」になってしまい、 規格数の多寡で結果が変わってくるように思います。 だからといって、じゃあどういうSQLにすれば良いのか、 すぐには提示できないのですが ... 自分のスキルの無さを棚に上げながら揚げ足取りのようですみません。
|
lvsa |
投稿日時: 2009/10/28 19:06
対応状況: −−−
|
一人前 登録日: 2009/10/6 居住地: 投稿: 104 |
Re: ランキングSQL ecbgさま
SQLの抽出条件ですが、以下の感じです。 1.カートに購入予定商品を入れる。 2.カート内の商品を過去1年以内に他のユーザが購入しているかを検索
それが上記部分です。 3.また、2の結果の商品が非表示、削除されていないかをチェックする意味で
してます。 あとは、2、3にて検索された商品のカウントとソート順を 価格で行いたかったので、GROUP BYを商品IDと価格で行っています。 こんな感じで伝わりますかね?? 私自身、人に教えられるほどの知識がないので、わかりづらい部分は、突っ込んでくださいwww |
ecbg |
投稿日時: 2009/10/28 18:52
対応状況: −−−
|
仙人 登録日: 2009/2/25 居住地: 東京 投稿: 387 |
Re: ランキングSQL lvsa様
すごいですね!! 私のSQL知識じゃなにが行われているのか、 ほとんど分らないのですが、買った商品に対して、 どういった条件の抽出になっているのですか? |
popo |
投稿日時: 2009/10/28 18:31
対応状況: −−−
|
長老 登録日: 2008/10/1 居住地: 投稿: 189 |
Re: ランキングSQL lvsa様
「この商品を買った人は、こんな商品も買っています」と言う機能を導入したいと思っておりました。 完成しましたら、導入方法を御教授して頂けると嬉しく思います。 何卒、よろしくお願い致します。 |
lvsa |
投稿日時: 2009/10/28 11:59
対応状況: −−−
|
一人前 登録日: 2009/10/6 居住地: 投稿: 104 |
Re: ランキングSQL hogehogeさま
返信ありがとうございます。 >GROUP BY > od.product_id > ) AS ranking ON class.product_id = ranking.product_id このような記述の仕方もできるのですね!大変参考になりました。 しかし・・SELECT結果は私の望むものではなかったです(泣) ↓↓↓↓↓↓結果↓↓↓↓↓↓ product_id | cnt | price01 ------------+-----+--------- 410 | 9 | 100 1 | 5 | 150 1 | 5 | 150 1 | 5 | 150 1 | 5 | 150 しかしながら、皆様のアドバイスを参考に試行錯誤した結果できました。 以下のようなSQLになりました。
↓↓↓↓↓↓結果↓↓↓↓↓↓↓ product_id | count | price02 ------------+-------+--------- 1 | 45 | 120 410 | 9 | 100000 100 | 5 | 10000 3 | 4 | 100 407 | 4 | 2 アドバイスして頂きました皆様ありがとうございました。 |
hogehoge |
投稿日時: 2009/10/28 11:05
対応状況: −−−
|
常連 登録日: 2008/9/19 居住地: Cusco,Peru 投稿: 67 |
Re: ランキングSQL エラー内容:column reference "product_id" is ambiguous
の対処として、class.product_id は、正解だと思います。 ただ、countしてるのにGROUP BYが無いって怒られてるんですよね。 要するにこういうことでしょうか。
なんか金額の扱いがおかしいような気が。。。 |
lvsa |
投稿日時: 2009/10/28 10:07
対応状況: −−−
|
一人前 登録日: 2009/10/6 居住地: 投稿: 104 |
Re: ランキングSQL pinerayさま
ありがとうございます。 返信遅くなりました・・・。 試してみましたが、今度は以下の部分がダメなようです。 SELECT product_id, count(*) AS cnt, price01 FROM dtb_products_class AS class LEFT JOIN ( SELECT product_id, count(*) FROM dtb_order AS o INNER JOIN dtb_order_detail AS od ON o.order_id = od.order_id WHERE customer_id in ( SELECT customer_id FROM dtb_order AS o INNER JOIN dtb_order_detail AS od ON o.order_id = od.order_id WHERE product_id = 2) AND o.create_date >= current_date - integer '360' GROUP BY product_id) AS ranking ON class.product_id = ranking.product_id ORDER BY cnt DESC, price01 DESC LIMIT 5 OFFSET 0; エラー内容:column reference "product_id" is ambiguous SELECT句のproduct_idがダメなようですね・・。 class.product_idやranking.product_id,dtb_products_class.product_idを試しても column "class.product_id" must appear in the GROUP BY clause or be used in an aggregate function とエラーになってしまいます。。。 どのようにしたら良いのでしょうか・・。 |
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |