phpとmysqlの連動について - PHPプロ!Q&A掲示板
キーワード / キーワードが設定されていません
- $sql = 'SELECT
- products_id, name
- FROM products
- WHERE status = ?
- ORDER BY create_date DESC';
- //$rowに下記のような配列でデータ取得
- Array(
- [0] => Array
- (
- [products_id] => 5
- [name] => あああ
- )
- [1] => Array
- (
- [products_id] => 8
- [name] => いいい
- )
- )
- $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
- FROM products_class_detail
- WHERE products_id = ?';
- foreach ($row as $key => $val) {
- // WHERE句のproducts_idに1回目で取得した$row[$key][products_id]を代入し問い合わせ
- }
- //最終的に$rowに下記のような配列でデータ取得
- Array(
- [0] => Array
- (
- [products_id] => 5
- [name] => あああ
- [min_price1] => 1000
- [max_price1] => 1500
- [min_price2] => 2000
- [max_price2] => 2500
- [price0] => 2500
- )
- [1] => Array
- (
- [products_id] => 8
- [name] => いいい
- [min_price1] => 1000
- [max_price1] => 1500
- [min_price2] => 2000
- [max_price2] => 2500
- [price0] => 2500
- )
- )
表示側でリンクをクリックすると指定の順番に並び替えもさせたく以下のような
ソースをつくりました。並び替えは下記の通りです。
・登録日順 (任意)
・価格の安い順 (任意)
・価格の高い順 (任意)
・id順 (デフォルト)
- switch($_GET['id']) {
- case '1':
- $where_sql = 'create_date DESC';
- break;
- case '2':
- $where_sql = 'price0';
- break;
- case '3':
- $where_sql = 'price0 DESC';
- break;
- default:
- $where_sql = 'products_id DESC';
- break;
- }
現状は2回のsqlによってデータを取得しておりそれぞれのorder句を作って
みたのですがcase1とdefaultは1回目のsqlのorder句になりcase2,case3は
2回目のorder句になりどうすればいいか悩んでおります。
全てのデータを取得後にarray_multisortでソートする事も考えてはみたのですが
ページング処理も行っており1ページで完結するものではないのでsql側で最初に
行わなければ意味がないようです^^;
なにかいい方法がございましたらアドバイスをお願い致します。
この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。





ページのトップへ


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