回答編集履歴

1

調整

2018/08/29 10:55

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -37,3 +37,57 @@
37
37
  */
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ # sample
44
+
45
+
46
+
47
+ 一応、ご提示のテーブルを利用してやるとこんな感じ
48
+
49
+
50
+
51
+ ```PHP
52
+
53
+ $date=["2018-08-29", "2018-09-02","2018-09-08"];
54
+
55
+
56
+
57
+ $sql ="SELECT `id` FROM `schedule` WHERE 1 ";
58
+
59
+ $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"];
60
+
61
+
62
+
63
+ $sql.="AND ( 0 ";
64
+
65
+ foreach($date as $d){
66
+
67
+ if(in_array($d,$cols)!==false){
68
+
69
+ $sql.="OR `{$d}`=1 ";
70
+
71
+ }
72
+
73
+ }
74
+
75
+ $sql.=") ";
76
+
77
+
78
+
79
+ print $sql;
80
+
81
+
82
+
83
+ ```
84
+
85
+
86
+
87
+ - カラム名の一覧をホワイトストとして$colsに確保していて
88
+
89
+ - 与えられた$dateの要素($d)が$colsに完全に合致すればカラム名として利用して
90
+
91
+ 1と合致するかチェックする
92
+
93
+ - OR検索なのでAND処理に対して(0 OR 条件1 OR 条件2 ・・・)というつなぎ方