|
s_kobayashi さん、こん**は。Hidemi Oya です。
>my $sqldata=qq(select meishou,shiyoukaisuu,jiki from tekiyoubu where meishou like "%$meishou%" and sakumotsumei like "$sakumotsu");
これが何でダブルのループなんだろうと思ったんですが、perl 側で農薬名と作物名のリストからそれぞれひとつずつ取り出して、その回数分 SELECT を繰り返しているってことなんですね。MySQL では正規表現が使えるので、下記のようなクエリにすれば、ループ無しで検索できます。で、農薬名を第1キー、作物名を第2キーにした2次元ハッシュに回数と時期を連結した値を保存していけば、あとで簡単に表の形で取り出せます。さらに、農薬名をハッシュキーにする際に、tm.pm を使って屋号を削除すれば、ハッシュ保存の段階で屋号抜き通称名でグルーピングでき、ハッシュデータサイズも削減できます。
なお、MySQL で大きなデータでは試したことがありませんが、小さなデータでは正規表現によるオーバーヘッドは感じませんでした。
$re_sakumotsu = join('|', split(/[ \,]| |、|,/, $in_sakumotsu));
$re_meishou = join('|', split(/[ \,]| |、|,/, $in_meishou));
// ユーザが正規表現でリストを渡すようにした方が使い勝手が良いかな
$sqldata = "select meishou, shiyoukaisuu, jiki from teiyoubu where meishou regexp '$re_meishou' and sakumotsumei regexp '^($re_sakumotsu)$'";
> oyaさんの希望を叶えるには、事前に商標・商品名テーブルを用意するか、データベースに一回当たらないと難しいと思います。
もちろん、屋号抜き通称名にまとめられている方がベターなのは言うまでもないですが、屋号付き農薬名ごとに異なる行になっていれば、Excel で削除するのは簡単なので、検索システム側であえて屋号を外した状態になってなくても OK です。
ただ、上の方法なら屋号抜き通称名ごとのグルーピングもデータベースを使用することなく可能だと思います。
ついでに、この方法でいくなら、農薬指定がない場合は、
$sqldata = "select meishou, shiyoukaisuu, jiki from teiyoubu where sakumotsumei regexp '^($re_sakumotsu)$'";
で検索するようにするだけで、リストにあげた作物に登録がある全農薬の表も作れます(用途を検索条件にして農薬数を制限しないと実用上は厳しいでしょうけど)。[#203] で書いた機能とはちょっと違いますが、こちらでも十分です。
ってことで、メインのプロジェクトが落ち着いたら、こちらの手法もご検討ください。
>私の組織では、農薬名の記載されたあらゆる資料の作成について農薬検査所データベースによる複数回チェックが義務づけられています。
うちもそうです。ってか、防除基準の誤記載等が問題になってから、多分いずこも同じ状況なんでしょうね。
>内容も必要事項だけに絞り込まれているのでチェックが容易です。作業能率は10倍以上改善できると期待しています。
農薬検査所の検索結果はいらないモノも全て出てきますからねえ…。JPP-NET は検索条件に合致する適用のみが表示されますが、この目的には農薬ごとに検索する必要があるので、s_kobayashi さんのシステムが一番便利ですね。
|
|