phpとmysqlを連携させデータを取得しています。mysql5です。
現在は2つのテーブルからデータを取得するため以下のように2回のsql文を発行しています。
$sql = 'SELECT
products_id, name, products_flag, comment1,
IF("' . $products->beforedays . '" < DATE(create_date), "1", "0") as new,
FROM products
WHERE status = ? AND del_flg = ?
ORDER BY create_date DESC';
// 1回目のsqlで取得したproducts_idを参照し下記のsqlを実行
$sql = 'SELECT
MIN(price1) as min_price1, MAX(price1) as max_price1,
MIN(price2) as min_price2, MAX(price2) as max_price2,
IFNULL(price2, price1) as price0, stock
FROM products_class_detail
WHERE products_id = ?';
これを1回のsqlにまとめる場合どのような書き方になるでしょうか?
自分なりに下記のようにしてみたところ動作はするのですが複数のデータが条件に
当てはまるはずがminとmaxがあるためか条件に当てはまる最後のデータのみしか
取得されませんでした。
※試しにmin,maxを外すと複数のデータを取得できました。
$sql = 'SELECT
products.products_id, products.name, products.products_flag, products.comment1,
IF("' . $products->beforedays . '" < DATE(products.create_date), "1", "0") as new,
MIN(products_class_detail.price1) as min_price1, MAX(products_class_detail.price1) as max_price1,
MIN(products_class_detail.price2) as min_price2, MAX(products_class_detail.price2) as max_price2,
IFNULL(products_class_detail.price2, products_class_detail.price1) as price0, products_class_detail.stock
FROM
products, products_class_detail
WHERE
products_class_detail.products_id = products.products_id
AND products.status2 = ? AND products.del_flg = ?
ORDER BY' . $where_sql;
商品の情報を取得するsqlで最後のorder句は商品の並び順の変更でユーザーの指定した
順番(新着順や価格順等)で表示するためのものです。
2回のsqlの場合は問題なく動作していたのですがで新着順や価格順に並び替えを行うため
1回のでsqlで行いたいと思っております。
新着順の場合は1回目のsqlに条件が入るので問題ないのですが価格順の場合は2回目の
sqlに条件が入るので2回のsqlではうまく並び替えができませんでした。
ソースの短縮にもなり可能であれば1回のsqlで完結させたいのですがどうすればいいものか
わからずつまづいております。
詳しい方がいらっしゃいましたら宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
大変申し訳ないのですが、
まずは質問者様がどのように試して上手くいかなかったのか
聞かせていただけますでしょうか。
後学のためにも自分で解決する力を養わないと・・・。
マニュアルをじっとみる→試す→ダメならgoogleさんに聞いてみる→
やさしく解説しているサイトをじっとみる→試す→ダメならもう一度googleさんに聞いてみる→もっとやさしく解説しているサイトをじっとみる→試す→ダメならgooに聞いてみる
のような段階を踏んで頂ければ幸いです。
No.1
- 回答日時:
existsで出来るのでは?
// 1回目のsqlで取得したproducts_idを参照し下記のsqlを実行
のSQLをexistsにしてみる。
外してたらごめんなさい。
参考URL:http://dev.mysql.com/doc/refman/5.1/ja/exists-an …
お返事ありがとうございます。mysqlは始めたばかりでexistsというのも初お目見えです^^;
マニュアルを見てみましたが現状のsql中のどこにいれればいいのかわからないのですが
具体的にはどのような形にすればいいのでしょうか?
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
Access パラメータクエリをcsv...
-
SQLサーバから、項目の属性(型...
-
sqlで、600行あるテーブルを100...
-
副問合せの書き方について
-
エクセルの関数について教えて...
-
【MySQL】auto_incrementの値を...
-
期間の重複を調べるSQL文につい...
-
上位3位を求めるSQL文は?
-
Updateの複数テーブル条件時のL...
-
VBAでボタンをクリックする方法...
-
inner joinをすると数がおかし...
-
accessに対してSQL文を発行する...
-
select文のwhere句に配列を入れ...
-
WordpressのContact form 7でzi...
-
エラー 1068 (42000): 複数の主...
-
PL/SQLの変数について
-
MySQL NULLだけをカウントして...
-
VIEWの元のテーブルのindexって...
-
Sumで該当データがない場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
マイクラPC版のコマンドで効率...
-
SQLサーバから、項目の属性(型...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] 3つのテーブルの結合で...
-
Access パラメータクエリをcsv...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
Unionした最後にGROUP BYを追加...
-
バインド変数について
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
selectした大量データをinsert...
-
inner joinをすると数がおかし...
おすすめ情報