今日は昨日作った絞込み条件用のHTMLをAjaxでPHP側に渡し、その値でWHERE句を生成するという部分を作ってみた。
チェックボックスからの値の取得は、jQueryでやったけど、これはちょっと正直理解せずにほぼコピペという形になってしまった。意味自体はわかるけど、jQueryの記述でそれが実現できている意味が理解できていないという意味。mapで無名関数を登録して値を配列にpushしているという事で、eachはいわゆるeachでいいのかな?要素それぞれに処理を行うというeachとかmap系の命令?。まぁそこはいいとして、画面上のcheckboxからその配列を取り出してくるjQueryの記述
$("[name='opt_foo[]']:checked").each(function() {
checked_foo.push(this.value) ;
}) ;
これの一番最初の部分が理解できてない。HTML上にある全チェックボックスから、名前「opt_foo」という名前を持つものでかつ、「checked」になっているチェックボックスのリストを返す記述…なのかな。jQueryに関しては、ちゃんとやらないと理解しないまま進んでしまいそうだから気をつけないと。
それはさておき、Ajaxのコールバック関数(JavaScript)内でこれらを使ってそれぞれの絞込み条件を取り出し、POST変数に指定してPHPを呼び出し、WHERE句を自動生成する部分は案外スムーズにできた。
条件が指定されると配列が作られるので、配列サイズが0じゃなかったらANDで条件を付与。それを絞り込み条件のグループ分繰り返すだけ。個別の条件内は複数の数値の中に該当するもの…という事でINを使って実装した。
AND XXX IN(0,1,2) AND YYY IN(3,4,5) AND (ZZZ IN (1,2,3) OR ZZZ2 IN (1,2,3))
のようにANDでINが連なるようになっている。フルに条件つけるとANDとINが大量になってしまうが…、MySQLはその辺り十分耐えられるのだろうか?そういうのはデータを増やして実際に動かしてみないとわからない部分だろうな。
しかしながら、この部分は非常にあっさりと、思った通りの動きをしてくれているように思う。複数の条件の組み合わせもできているし、問題ないだろう。
実際テストしてて思ったけど、条件のリセットってのは必要だと感じた。JavaScriptで実装できるだろうけど、どうやるのが一番簡単かな。そいやFORMのDOMにresetとかなかったかな?あったら楽だけどw
明日は集中して何かやるのは難しそうだから、まったりとデータ入力をしようかなと思う。土日で50件分のデータ入力完了ってのを目指そうか。

