回答編集履歴
1
コードミス修正
answer
CHANGED
@@ -3,30 +3,25 @@
|
|
3
3
|
- subject LIKE '%数%' OR
|
4
4
|
- '数学者' LIKE '%数学(subject)%'
|
5
5
|
|
6
|
-
※subjectが空の場合は「'数学者' LIKE '%%'」となってしまうので「空」を除外します
|
7
|
-
|
8
6
|
```sql
|
9
7
|
SELECT * FROM table
|
10
8
|
WHERE (
|
11
|
-
difficulty =
|
9
|
+
difficulty = :difficulty AND
|
12
|
-
subject LIKE '%:subject%' AND
|
10
|
+
subject LIKE CONCAT('%',:subject,'%') AND
|
13
|
-
teacher LIKE '%:teacher%'
|
11
|
+
teacher LIKE CONCAT('%',:teacher,'%')
|
14
12
|
) OR (
|
15
|
-
difficulty =
|
13
|
+
difficulty = :difficulty AND
|
16
|
-
|
14
|
+
:subject LIKE CONCAT('%',subject,'%') AND
|
17
|
-
|
15
|
+
:teacher LIKE CONCAT('%',teacher,'%')
|
18
|
-
subject <> '' AND
|
19
|
-
teacher <> '' AND
|
20
|
-
subject IS NOT NULL AND
|
21
|
-
teacher IS NOT NULL
|
22
16
|
)
|
23
17
|
```
|
24
18
|
|
25
|
-
PHPのプレースホルダのバインドは、下記のようにします。
|
19
|
+
PHPのプレースホルダのバインドは、下記のようにします。テキストボックスが空の時は、条件分岐でSQL文とプレースホルダのバインドを分けて書きます。
|
26
20
|
|
27
21
|
```php
|
22
|
+
$stm->bindValue(':difficulty', $difficulty, PDO::PARAM_STR);
|
28
|
-
$stm->bindValue(':subject',
|
23
|
+
$stm->bindValue(':subject', $subject, PDO::PARAM_STR);
|
29
|
-
$stm->bindValue(':teacher',
|
24
|
+
$stm->bindValue(':teacher', $teacher, PDO::PARAM_STR);
|
30
25
|
```
|
31
26
|
|
32
|
-
きちんとやるには、日本語の形態要素解析か単語辞書検索のようなロジックが必要になります。
|
27
|
+
きちんとやるには、日本語の形態要素解析か単語辞書検索のようなロジックが必要になります。
|