
HTML検索フォームにチェックボックスを複数設け、チェックが入ったら
チェックされているもの同士をORで結んだものを、他の検索キーとANDで結ぶ
SQL文を発行したいのですが。
これを効率的に行う方法を、以前に本掲示板でご教示いただきました。
<input type="checkbox" name="food[]" value="1">果物
<input type="checkbox" name="food[]" value="2">野菜
<input type="checkbox" name="food[]" value="3">肉類
if(is_array($_POST['food'])) {
$sql .= " AND (";
$i=0; # 「or」 をつけるフラグ
foreach($_POST['food'] AS $food_code) {
if ($i) {
$sql .= " OR ";
}
$sql .= "MYTABLE.MYFOOD = '$food_code'";
$i++;
}
$sql .=")";
}
これを応用し、MySQLのMYTABLE.MYFOODに次のようなレコードが登録されているとして、
果物―みかん
野菜〔にんじん〕
野菜(キャベツ)
肉類【豚バラ】
果物~りんご
:
これら先頭2文字を切り出して(あるいは「LIKE '肉類%'」のように、~で始まる、
でもいいです)真偽を評価したいです。
その際、果物と肉類にチェックが入ったと仮定して
AND (SUBSTRING(MYTABLE.MYFOOD,1,4) = '果物' OR SUBSTRING(MYTABLE.MYFOOD,1,4) = '肉類')
としてみたら、合致するものだけをうまく抽出できたのですが、
このようなロジックを冒頭のPHPコードに組み込むにはどう書いたらいいでしょうか?
なお、果物5種類、野菜3種類、肉類7種類と、いずれも有限ですので、
SQL文をベタ書きすることは十分可能だと思っています。
No.1ベストアンサー
- 回答日時:
果物や肉類を種別テーブルとして別に作った方がいいような気がするのは置いといて。
例です。
<input type="checkbox" name="food[]" value="果物">
<input type="checkbox" name="food[]" value="野菜">
<input type="checkbox" name="food[]" value="肉類">
として、
$sql .= "(SUBSTRING(MYTABLE.MYFOOD,1,4) = '";
$sql .= implode ("' OR SUBSTRING(MYTABLE.MYFOOD,1,4) = '",$_POST['food']);
$sql .= ")";
と、こんな感じなのかなと思う次第ですがいかがでしょう。
参考URL:http://php.s3.to/man/function.implode.html
moon_nightさん、貴重レスありがとうございました。
>果物や肉類を種別テーブルとして別に作った方がいいような気がするのは置いといて。
わたしもDBをそのように設計すべきだと思いますが、
外注で作ったプログラムの改造で、もう後戻りできなくなっているのです。。。
ご提示いただいたサンプルで、要望はかないました。
implode というの、なかなか汎用性が高いですね。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
アンドロイドスマホでのphp ech...
-
Postgresの特定のカラムからス...
-
ここで言う空文字の意味とは?
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
ショッピングカートの作成
-
PHPで画像の渡しが上手く行きま...
-
PHPでCookieを使った訪問回数に...
-
phpでのボタン押下の活性・非活...
-
フォームへの前回入力値をクリ...
-
DBの値をチェックボックスに反...
-
テキストボックスとsubmitボタ...
-
パラメーターを隠す
-
PHPでユーザー情報を入力して簡...
-
POSTデータのNAME属性をVALUEに...
-
<input type="hidden" >で配列...
-
左右に分かれているフレーム間...
-
【PHPチェック】ラジオボタンが...
-
入力した部分を表示させたまま...
-
複数チェックボックスの入力制...
-
ラジオボタンをsessionで使いたい
-
複数のラジオボタングループを...
-
PHPの初心者です。現在チェック...
おすすめ情報