teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

調整

2018/08/29 10:55

投稿

yambejp
yambejp

スコア117918

answer CHANGED
@@ -17,4 +17,31 @@
17
17
  $stmt->execute($data);
18
18
  $rows=$stmt->fetchAll(PDO::FETCH_ASSOC);
19
19
  */
20
- ```
20
+ ```
21
+
22
+ # sample
23
+
24
+ 一応、ご提示のテーブルを利用してやるとこんな感じ
25
+
26
+ ```PHP
27
+ $date=["2018-08-29", "2018-09-02","2018-09-08"];
28
+
29
+ $sql ="SELECT `id` FROM `schedule` WHERE 1 ";
30
+ $cols=[ "2018-09-23", "2018-09-22", "2018-09-16", "2018-09-15", "2018-09-09", "2018-09-08", "2018-09-02", "2018-09-01"];
31
+
32
+ $sql.="AND ( 0 ";
33
+ foreach($date as $d){
34
+ if(in_array($d,$cols)!==false){
35
+ $sql.="OR `{$d}`=1 ";
36
+ }
37
+ }
38
+ $sql.=") ";
39
+
40
+ print $sql;
41
+
42
+ ```
43
+
44
+ - カラム名の一覧をホワイトストとして$colsに確保していて
45
+ - 与えられた$dateの要素($d)が$colsに完全に合致すればカラム名として利用して
46
+ 1と合致するかチェックする
47
+ - OR検索なのでAND処理に対して(0 OR 条件1 OR 条件2 ・・・)というつなぎ方