PHPでSQLを組み立てて実行するプログラムを書いています。
ただ、この手のプログラム、書くのはそれほど苦ではないのですが、綺麗にと言いますか、コンパクトに無駄がなくまとめるのが苦手なのです。
例えば、このプログラム、
php
1$sql = "SELECT * FROM rk_list"; 2$jyoken = 0; 3 4// タイプ 5if ($typeno > 0){ 6 if($jyoken == 0){ 7 $sql = $sql . " where "; 8 $jyoken = 1; 9 }else{ 10 $sql = $sql . " and "; 11 } 12 $sql = $sql . "typeno = " . $typeno; 13} 14 15// 価格1 16if ($price1 > 0){ 17 if($jyoken == 0){ 18 $sql = $sql . " where "; 19 $jyoken = 1; 20 }else{ 21 $sql = $sql . " and "; 22 } 23 $sql = $sql . "price >= " . $price1; 24} 25 26// 価格1 27if ($price2 > 0){ 28 if($jyoken == 0){ 29 $sql = $sql . " where "; 30 $jyoken = 1; 31 }else{ 32 $sql = $sql . " and "; 33 } 34 $sql = $sql . "price <= " . $price2; 35} 36 37// 年 38if ($year > 0){ 39 if($jyoken == 0){ 40 $sql = $sql . " where "; 41 $jyoken = 1; 42 }else{ 43 $sql = $sql . " and "; 44 } 45 if($year == "2016 46 $sql = $sql . "year <= " . $year; 47 }else{ 48 $sql = $sql . "year = " . $year; 49 } 50} 51 52$sql = $sql . ";";
つまり、フォームで入力された値を元にWhere句を組み立てているのですが、未入力もありなので、何も入力されなければ、
SELECT * FROM rk_list;
で終わりなのですが、条件が入力された場合は、最初の条件の場合は前に"Where"を付け、2個め以降は、"and"でつないでいくので、項目ごとに最初かどうかの判定を入れており、大変冗長性のある、長いプログラムになってしまっています。
こういうの、なんとか条件判定分を減らし、でも、あまりにトリッキーではなく、見やすい、いい方法は無いかと思いまして。。。
一人で考えているのも煮詰まってしまっていますので、誰か一緒に考えて頂けないかと。。。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/16 12:24
退会済みユーザー
2018/07/16 12:30
2018/07/16 13:24 編集
退会済みユーザー
2018/07/16 15:48