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で質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- 楽器・演奏 この二つの違いってなにですか?私がエレキギターでライブ配信するなら両者とも同じように使えますよね?Y 1 2023/07/02 11:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
selectした大量データをinsert...
-
マイクラPC版のコマンドで効率...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
ある条件の最大値+1を初番する...
-
select文のwhere句に配列を入れ...
-
SQL Left Join で重複を排除す...
-
URL と行番号の指定
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
Unionした最後にGROUP BYを追加...
-
クエリ表示と、ADOで抽出したレ...
-
accessのチェックボックスをSQL...
-
キー毎の、ある列のmaxのレコー...
-
inner joinをすると数がおかし...
-
1テーブル&複数レコードの更新...
-
EXPLAINのtypeがALLのときの対...
-
一つ前のレコードの値と減算し...
-
SQLサーバから、項目の属性(型...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
inner joinをすると数がおかし...
-
SQLにて特定の文字を除いた検索...
-
selectした大量データをinsert...
-
sqlで、600行あるテーブルを100...
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
1テーブル&複数レコードの更新...
-
複数テーブルのGROUP BY の使い...
-
Access パラメータクエリをcsv...
-
バインド変数について
-
ある条件の最大値+1を初番する...
-
[SQLServer] テーブル名からカ...
-
SQLについての質問
-
キー毎の、ある列のmaxのレコー...
おすすめ情報