phpとmysqlの連動について - PHPプロ!Q&A掲示板

2031

  • 0P

phpとmysqlの連動について

質問日時 / 2009年5月12日 21:48    回答数 / 1件

Questioner:  agupx  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

  1. <?php
  2. $sql = 'SELECT
  3.             products_id, name
  4.         FROM products
  5.         WHERE status = ?
  6.         ORDER BY create_date DESC';
  7.  
  8. //$rowに下記のような配列でデータ取得
  9. Array(
  10.   [0] => Array
  11.     (
  12.       [products_id] => 5
  13.       [name] => あああ
  14.      )
  15.   [1] => Array
  16.     (
  17.       [products_id] => 8
  18.       [name] => いいい
  19.      )
  20. )
  21.  
  22. $sql = 'SELECT
  23.             MIN(price1) as min_price1, MAX(price1) as max_price1,
  24.             MIN(price2) as min_price2, MAX(price2) as max_price2,
  25.             IFNULL(price2, price1) as price0
  26.         FROM products_class_detail
  27.         WHERE products_id = ?';
  28.  
  29. foreach ($row as $key => $val) {
  30.     // WHERE句のproducts_idに1回目で取得した$row[$key][products_id]を代入し問い合わせ
  31. }
  32.  
  33. //最終的に$rowに下記のような配列でデータ取得
  34. Array(
  35.   [0] => Array
  36.     (
  37.       [products_id] => 5
  38.       [name] => あああ
  39.        [min_price1] => 1000
  40.       [max_price1] => 1500
  41.       [min_price2] => 2000
  42.       [max_price2] => 2500
  43.       [price0] => 2500
  44.      )
  45.   [1] => Array
  46.     (
  47.       [products_id] => 8
  48.       [name] => いいい
  49.        [min_price1] => 1000
  50.       [max_price1] => 1500
  51.       [min_price2] => 2000
  52.       [max_price2] => 2500
  53.       [price0] => 2500
  54.  
  55.      )
  56. )

表示側でリンクをクリックすると指定の順番に並び替えもさせたく以下のような
ソースをつくりました。並び替えは下記の通りです。

・登録日順 (任意)
・価格の安い順 (任意)
・価格の高い順 (任意)
・id順 (デフォルト)

  1. <?php
  2. switch($_GET['id']) {
  3.  
  4.     case '1':
  5.         $where_sql = 'create_date DESC';
  6.         break;
  7.     case '2':
  8.         $where_sql = 'price0';
  9.         break;
  10.     case '3':
  11.         $where_sql = 'price0 DESC';
  12.         break;
  13.     default:
  14.         $where_sql = 'products_id DESC';
  15.         break;
  16.  
  17. }

現状は2回のsqlによってデータを取得しておりそれぞれのorder句を作って
みたのですがcase1とdefaultは1回目のsqlのorder句になりcase2,case3は
2回目のorder句になりどうすればいいか悩んでおります。

全てのデータを取得後にarray_multisortでソートする事も考えてはみたのですが
ページング処理も行っており1ページで完結するものではないのでsql側で最初に
行わなければ意味がないようです^^;

なにかいい方法がございましたらアドバイスをお願い致します。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01NurseAngelとりあえず結合使おうぜ >>CODE <?php $sql = 'S
 ┗A01-1agupxこの意見は質問者によって削除されました。

回答一覧

並び替え:

A01
answererNurseAngel [5月13日 00:55] (最終編集:5月14日 01:46)

とりあえず結合使おうぜ

  1. <?php
  2. $sql = 'SELECT 
  3.             products.products_id,
  4.             products.name,
  5.             MIN(products_class_detail.price1) as min_price1, MAX(products_class_detail.price1) as max_price1, 
  6.             MIN(products_class_detail.price2) as min_price2, MAX(products_class_detail.price2) as max_price2, 
  7.             IFNULL(products_class_detail.price2, products_class_detail.price1) as price0 
  8.         FROM products_class_detail ,products
  9.         WHERE 
  10.               products_class_detail.products_id = products.products_id
  11.           AND products.status = ? 
  12.         ORDER BY ?
  13.          ';
#今適当に書いたのでたぶんどっか間違ってるのと、あとJOIN使った方がいいと思う


SQL文を2回に分けるんだったらこんなかんじ?
'ORDER BY'自体を両方のSQLにくっつければいい。

  1. <?php 
  2. switch($_GET['id']) { 
  3.   
  4.     case '1'
  5.         $order_sql1 = 'ORDER BY create_date DESC'
  6.         $order_sql2 = ''
  7.         break
  8.     case '2'
  9.         $order_sql1 = ''
  10.         $order_sql2 = 'ORDER BY price0'
  11.         break
  12.     case '3'
  13.         $order_sql1 = ''
  14.         $order_sql2 = 'ORDER BY price0 DESC'
  15.         break
  16.     default
  17.         $order_sql1 = 'ORDER BY products_id DESC'
  18.         $order_sql2 = ''
  19.         break
  20. }
……と書いたときは思ったんだが2回目のSQLにORDER BYが無いと順番が規定されないのでこっちは無理だった。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeragupx [5月13日 15:29] (最終編集:5月13日 23:46)

この意見は質問者によって削除されました。

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)