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

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件)

大変申し訳ないのですが、


まずは質問者様がどのように試して上手くいかなかったのか
聞かせていただけますでしょうか。

後学のためにも自分で解決する力を養わないと・・・。

マニュアルをじっとみる→試す→ダメならgoogleさんに聞いてみる→
やさしく解説しているサイトをじっとみる→試す→ダメならもう一度googleさんに聞いてみる→もっとやさしく解説しているサイトをじっとみる→試す→ダメならgooに聞いてみる
のような段階を踏んで頂ければ幸いです。
    • good
    • 0

existsで出来るのでは?



// 1回目のsqlで取得したproducts_idを参照し下記のsqlを実行
のSQLをexistsにしてみる。

外してたらごめんなさい。

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/exists-an …
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。mysqlは始めたばかりでexistsというのも初お目見えです^^;

マニュアルを見てみましたが現状のsql中のどこにいれればいいのかわからないのですが
具体的にはどのような形にすればいいのでしょうか?

宜しくお願い致します。

お礼日時:2009/05/20 13:08

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