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で完結させたいのですがどうすればいいものか
わからずつまづいております。
詳しい方がいらっしゃいましたら宜しくお願い致します。
お礼
確かにその方法でできそうですね! 私は頭がかたいみたいで全然思いつきませんでした。。。 どうもありがとうございます!