こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

1つのsql文でデータを取得したい

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で完結させたいのですがどうすればいいものか
わからずつまづいております。

詳しい方がいらっしゃいましたら宜しくお願い致します。

投稿日時 - 2009-05-17 12:33:45

QNo.4965989

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

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

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

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

投稿日時 - 2009-05-21 02:06:50

existsで出来るのでは?

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

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

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/exists-and-not-exists-subqueries.html

投稿日時 - 2009-05-20 02:22:33

お礼

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

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

宜しくお願い致します。

投稿日時 - 2009-05-20 13:08:09

あなたにオススメの質問