プロが教える店舗&オフィスのセキュリティ対策術

はじめまして、こんばんは。
現在、ECサイトを構築中なのですが、MySQLにPHPから検索をかけたいのですが、どうにも詰まってしまったので、投稿させて頂きました。
PHPバージョン:PHP 5.2.6
DBバージョン:MySQL 4.1.22

機能としては、購入履歴から、購入商品のランキングを作りたいと思っております。
ランキング自体の表示はOKなのですが、そこに商品のカテゴリーを表示させたいのです。

関係するテーブルは以下の通りです。
【order】購入履歴テーブル
product_id:商品ID

【products】商品テーブル
product_id:商品ID
name:商品名
image:商品画像

【p_category】商品カテゴリーテーブル
product_id:商品ID
category_id:カテゴリーID

【category】カテゴリーテーブル
category_id:カテゴリーID
category_name:カテゴリー名
parent_category_id:親カテゴリーID

【表示させたい項目】
product_id:商品ID
name:商品名
image:商品画像
category_id:カテゴリーID
category_name:カテゴリー名
parent_category_id:親カテゴリーID

現在のソースは以下の通りです。
---------------------------------------
SELECT
  count(o.product_id) as rank,
  name,
  image,
  p.product_id
FROM
  order as o,
  products as p
WHERE
  o.product_id=p.product_id
GROUP BY
  name,
  image,
  p.product_id
ORDER BY
  rank desc limit 5
---------------------------------------
上記にプラスしたいのは、
p.product_idと【p_category】のproduct_idが一致したcategory_idを取得して、【p_category】のcategory_idと【category】category_idが一致したcategory_name、parent_category_idも取得したいです。

分かりにくいうえに、長文になってしまいましたが、ご指導・ご鞭撻のほど宜しくお願い申し上げます。

A 回答 (2件)

何を言いたいのだろう?


>これで、出来れば、category_idが2か、parent_category_idが0か2のものだけを抽出したいのですが、それが出来ません。
>上記のWHEREに追加で、
>---------------------------------------
>AND category_id=2
>AND parent_category_id IN(0,2)
>---------------------------------------
AND (category_id=2 OR parent_category_id IN(0,2))
こう言う事を言いたかったのですか?

蛇足ですが、テーブル結合をする場合、
サブクエリーを使った方が、場合によっては速くなりますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
表示させたい通りに出来ました。
本当に有難う御座いました。

>AND (category_id=2 OR parent_category_id IN(0,2))
の書き方がわからなかったので、質問させて頂きました。
質問の文章が分かりにくかったようで、申し訳ありませんでした。

ありがとうございました。

お礼日時:2008/11/22 21:43

対照表もテーブル結合に含めてあげるとよいのではないでしょうか。



group by を使用しているみたいなので、集計結果にテーブル結合するとよさそうですね。

この回答への補足

一応何とか表示させられるようになりました。
現状は下記の通りです。
---------------------------------------
SELECT
  count(o.product_id) as rank,
  name,
  image,
  p.product_id,
  c1.product_id as c1_id,
  c1.category_id as c1_catid,
  c2.category_id as c2_catid,
  c2.category_name as c2_catname,
  c2.parent_category_id as c2_pcatid

FROM
  order as o,
  products as p
  p_category as c1,
  category as c2

WHERE
  o.product_id=p.product_id
AND o.product_id=c1.product_id
AND c1.category_id = c2.category_id

GROUP BY
  name,
  image,
  p.product_id
  c1.category_id,
  c2.category_id,
  c2.parent_category_id
ORDER BY
  rank desc limit 5
---------------------------------------
これで、出来れば、category_idが2か、parent_category_idが0か2のものだけを抽出したいのですが、それが出来ません。
上記のWHEREに追加で、
---------------------------------------
AND category_id=2
AND parent_category_id IN(0,2)
---------------------------------------
としてみても、ダメでした。
度々恐れ入りますが、ご指導・ご鞭撻のほど宜しくお願い申し上げます。

補足日時:2008/11/22 17:05
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
現在試行錯誤中です。

お礼日時:2008/11/22 17:05

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