質問編集履歴

1

インストラクターの回答を追加

2021/01/01 04:05

投稿

konisi721
konisi721

スコア11

test CHANGED
File without changes
test CHANGED
@@ -52,12 +52,176 @@
52
52
 
53
53
 
54
54
 
55
- googleでの検索
55
+ googleでinの検索
56
+
57
+ インストラクターへの質問をして
56
58
 
57
59
 
58
60
 
59
61
  ### 補足情報(FW/ツールのバージョンなど)
60
62
 
61
-
63
+ インストラクターの回答
64
+
65
+ $games = $table->find()->where("gameday like '".$this->request->getQuery("k")."%'")->all();
66
+
67
+
68
+
69
+ sql部分だけ見ると
70
+
71
+
72
+
73
+ gameday like '".$this->request->getQuery("k")."%'")
74
+
75
+
76
+
77
+
78
+
79
+ like文は曖昧一致という意味で、 後ろに書かれたものが文字列にあるかどうかを調べる
80
+
81
+
82
+
83
+ この場合、$this->request->getQuery("k")には、2019や2020が入っているので、それが連結されます。
84
+
85
+ よって、2020の場合、
86
+
87
+ gameday like '2020%'
88
+
89
+ となりますね。
90
+
91
+
92
+
93
+ %は、なんでもいいので文字があるということで、
94
+
95
+ 前に書けば、途中のものも取ってこれる。
96
+
97
+ 後ろに書けば2020で始まるものという意味。
98
+
99
+
100
+
101
+ そのため、 2020%なので、 2020-01-01 は一致します。 2020-12-31 も一致します。
102
+
103
+
104
+
105
+ まずinですが、その値があるかどうかを調べるも。
106
+
107
+
108
+
109
+ gameid in (1,2,3,4,5,6,7)
110
+
111
+ とすると、gameidが1か2か3か4か5か6か7のもののみ取得。
112
+
113
+
114
+
115
+ それを踏まえて、
116
+
117
+
118
+
119
+ $arr = "in(";
120
+
121
+
122
+
123
+ 初期値に "in ("を入れておく。
124
+
125
+
126
+
127
+ $arr1を初期化。
128
+
129
+
130
+
131
+ $arr1 = "";
132
+
133
+
134
+
135
+ 絞り込んだ$gamesデータをforeachで回し、その1行1行を$gに入れる。
136
+
137
+
138
+
139
+ foreach ($games as $g) {
140
+
141
+ $arr.=$g->id.",";
142
+
143
+ }
144
+
145
+
146
+
147
+ idを連結していきます。
148
+
149
+ in (1,3,4,7,9,10, のような感じになる。
150
+
151
+
152
+
153
+
154
+
155
+ if ($arr!="in("){
156
+
157
+
158
+
159
+ $arrがin( 以外のとき、つまりはforeachに一回は入った時の処理。
160
+
161
+
162
+
163
+ $arr = rtrim($arr,",").")";
164
+
165
+
166
+
167
+ 最後の1文字を削除します。最後が','だったら削除といった感じ。
168
+
169
+ in (1,3,4,7,9,10, こんな感じになっているので、最後の,を消し、")"を.で連結している。。
170
+
171
+
172
+
173
+ $arr1 = " where id ".$arr;
174
+
175
+
176
+
177
+ 文字列連結。
178
+
179
+ この時点で、$arr1は、
180
+
181
+ where id in (1,3,4,7,9,10) のようになる。
182
+
183
+
184
+
185
+ $arr2 = $arr;
186
+
187
+
188
+
189
+ バックアップ。
190
+
191
+
192
+
193
+ $arr = " where gameid ".$arr;
194
+
195
+
196
+
197
+ 同じように連結。
198
+
199
+ where gameid in (1,3,4,7,9,10) のようになる。
200
+
201
+
202
+
203
+
204
+
205
+ $arr3の初期化。
206
+
207
+
208
+
209
+ $arr3 = "";
210
+
211
+
212
+
213
+ $arrがin( のとき、つまりはforeachに一回も入っていない時の処理。
214
+
215
+
216
+
217
+
218
+
219
+ } else {
220
+
221
+ $arr = "";
222
+
223
+ $arr2 = "";
224
+
225
+ }
62
226
 
63
227
  ここにより詳細な情報を記載してください。