質問を訂正しました。
PHPとMySQLを使って以下のような機能を実装したいです。
難易度、科目名、講師名の3つのカラムを持つテーブルがあり、いくつかのレコードが格納されています。
ここで、このテーブルからレコードを検索して、一致するものを抽出したいです。
ちなみに、「難易度」は<select>タグでプルダウンメニューとして設定し、
(「易」「普通」「難」から選ぶ)
「科目名」と「講師名」は<input type="text">で設定します。
検索の条件は
検索者は「難易度」の選択のみが必須で、「科目名」と「講師名」の入力は任意。
できなくて困っていることは
例えば「数学」として格納されているデータを抽出するのに、 「数」では引っかかってくれるのですが、「数学者」では引っかからないことです。
ポストされたデータは、難易度が$difficulty、科目名が$subject、講師名が$teacherに代入してあります。。テーブル名はtableです。
汚いコードですが書いてみたものです。
PHP
1 if($difficulty=='易'){ 2 3 $sql = "SELECT * FROM table 4 WHERE (difficulty='易') AND (subject LIKE(:subject)) AND (teacher 5 LIKE(:teacher))"; 6 7 $stm = $pdo->prepare($sql); 8 $stm->bindValue(':subject', "%{$subject}%", PDO::PARAM_STR); 9 $stm->bindValue(':teacher', "%{$teacher}%", PDO::PARAM_STR); 10 11 }else if($difficulty=='普通'){ 12 //上と同じ処理 13 }else{ 14 //上と同じ処理 15 }
WHEREをどのようにすれば、入力文字が実際のデータの文字列を超えていても抽出できるのでしょうか?
また選択必須の難易度$difficultyは条件分岐しなくてもできるでしょうか?
複雑で面倒な質問で本当にすみません。もしわかる方がいれば知恵を拝借させてください。
よろしくお願いします。
以下追記です。________________________________________________________________________
$stm->bindValue(':subject1', "%{$subject}%", PDO::PARAM_STR); $stm->bindValue(':subject2', "{$subject}%", PDO::PARAM_STR);
のように、subject1とsubject2をORではできないのでしょうか?(試しましたが動作しませんでした。)
"{$subject}%"とすれば格納されている文字列に余計なものが続いて入力されていても抽出されると思ったのですが、、
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/13 09:17
退会済みユーザー
2017/09/13 09:36
2017/09/13 09:53