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で質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームでのリセットを使う方法
-
PHP ボタンが押されたら処理を...
-
ラジオボタンをsessionで使いたい
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
<input type="hidden" >で配列...
-
ラジオボタンを押すと、表示が...
-
【HTML(PHP?)】複数のフォーム...
-
PHPで、ボタンを押すと同じペー...
-
フォームへの前回入力値をクリ...
-
適性診断テストみたいなものを...
-
エラーを元の画面に表示させるには
-
phpで分からないエラーが出てし...
-
チェックボックスがチェックさ...
-
フォームに入力された値を計算...
-
フォームの内容をクッキーに保...
-
チェックボックスの必須項目指定
-
PHP・MYSQLで複数のチェックボ...
-
チェックボックスによる検索
-
PHPでフォームデータをサンクス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input type="hidden" >で配列...
-
HTMLで前の画面に戻る時、入力...
-
PHPでユーザー情報を入力して簡...
-
PHP ボタンが押されたら処理を...
-
PHPとHTML+Xamppの掲示板で画像...
-
syntax error, unexpected '}' ...
-
検索時の選択内容を保持する方法
-
PHPでCookieを使った訪問回数に...
-
チェックボックスによる検索
-
フォームでのリセットを使う方法
-
PHPで画像の渡しが上手く行きま...
-
チェックボックスによる検索(...
-
フォームへの前回入力値をクリ...
-
フォームボタンを押すたびに数...
-
php mysql でチェックボックス...
-
PHPの関数実行
-
phpで分からないエラーが出てし...
-
PHPで、ボタンを押すと同じペー...
-
ラジオボタンをsessionで使いたい
-
入力フォーム→確認画面→送信画...
おすすめ情報