はじめまして、こんばんは。
現在、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も取得したいです。
分かりにくいうえに、長文になってしまいましたが、ご指導・ご鞭撻のほど宜しくお願い申し上げます。
No.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))
こう言う事を言いたかったのですか?
蛇足ですが、テーブル結合をする場合、
サブクエリーを使った方が、場合によっては速くなりますよ。
ありがとうございます。
表示させたい通りに出来ました。
本当に有難う御座いました。
>AND (category_id=2 OR parent_category_id IN(0,2))
の書き方がわからなかったので、質問させて頂きました。
質問の文章が分かりにくかったようで、申し訳ありませんでした。
ありがとうございました。
No.1
- 回答日時:
対照表もテーブル結合に含めてあげるとよいのではないでしょうか。
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)
---------------------------------------
としてみても、ダメでした。
度々恐れ入りますが、ご指導・ご鞭撻のほど宜しくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) accessについて 2 2022/05/31 16:58
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- ヤフオク! ヤフオクの、商品IDとオークションIDはちかうのですか? 商品IDで何処にありますか? 1 2023/08/05 20:30
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
Access パラメータクエリをcsv...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
Unionした最後にGROUP BYを追加...
-
PL/SQLの変数について
-
android studio
-
VIEWの元のテーブルのindexって...
-
SQLite3でこんな便利なSQLはで...
-
selectした大量データをinsert...
-
複数のExcelアドインひとつのタ...
-
1テーブル&複数レコードの更新...
-
”photo id” とは何ぞや?
-
ある条件の最大値+1を初番する...
-
verilogに適したvimの設定を探...
-
group byのSQLでインデックスを...
-
insertを高速化させたい
-
親と子供が複数のSQL取得方法
-
テーブル作成です。どこかのス...
-
クエリ表示と、ADOで抽出したレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
副問合せの書き方について
-
マイクラPC版のコマンドで効率...
-
Unionした最後にGROUP BYを追加...
-
selectした大量データをinsert...
-
SQLにて特定の文字を除いた検索...
-
[SQLServer] テーブル名からカ...
-
1テーブル&複数レコードの更新...
-
inner joinをすると数がおかし...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
insertを高速化させたい
-
PL/SQLの変数について
-
キー毎の、ある列のmaxのレコー...
おすすめ情報