Re: ACFinder 作物タブUI修正中

このトピックの投稿一覧へ

なし Re: ACFinder 作物タブUI修正中

msg# 1.2
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2013.10.19 22:24 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
UI については雰囲気だけと言うことですが、1点だけ。検索タブの検索結果ですが、作物名のレベルが分かるようにしていただけるとありがたいです。

それと、SQL の修正を1点。たとえば、検索タブで「根深ねぎ」を「上位分類含む」で選択した場合、SQL が下記のようになり、根深ねぎ以外の level = 4 の作物まで検索されてしまいます。分類タブで「ねぎ、根深ねぎ、ねぎ類、ねぎ(露地栽培)」を選んだ場合も同様ですね。
SELECT idSaku FROM m_sakumotsu WHERE idSaku REGEXP '^(02000000|02990051|0299005109)'
level = 4 の作物名を含む場合、level = 3 の作物 ID は 10 桁にする必要があります。
SELECT idSaku FROM m_sakumotsu WHERE idSaku REGEXP '^(02000000|0299005100|0299005109)'
この「02000000|0299005100|0299005109」を生成するロジックを SQL だけで書くと、下記のようになります。
select concat('|', if(level = 4, idsaku, if(level < 3, substr(idsaku, 1, 8),if((select max(level) from sakumotsu where sakumotsu in ('野菜類','その他野菜類','ねぎ','根深ねぎ')) = 4, idsaku, substr(idsaku, 1, 8))))) from sakumotsu where sakumotsu in ('野菜類','その他野菜類','ねぎ','根深ねぎ')
複雑そうに見えて実行速度はほとんどかかりませんが、level = 4 を含むかどうかの判定は Delphi 側でやっちゃった方が分かりやすいですかねえ…。
select max(level) from sakumotsu where sakumotsu in ('野菜類','その他野菜類','ねぎ','根深ねぎ')
これで maxlevel を取得して、maxlevel = 4 のときは
select concat('|', if(level < 3, substr(idsaku, 1, 8), idsaku)) from sakumotsu where sakumotsu in ('野菜類','その他野菜類','ねぎ','根深ねぎ')
maxlevel < 4 のときは
select concat('|', substr(idsaku, 1, 8)) from sakumotsu where sakumotsu in ('野菜類','その他野菜類','ねぎ')


ついでに、「(○○を除く)」の削除部分ですが、新 UI では適用検索時は常に正式な作物名が使用されるので、別名を処理する必要はないはずです。上の根深ねぎの例で言うと、
concat('、', sakumotsu, betsumei) NOT REGEXP '\((.*、)?(野菜(類)?|その他野菜(類)?|ねぎ|根深ねぎ)(、.*)?を(除|のそ)く'
の部分は、
sakumotsu NOT REGEXP '\((.*、)?(野菜(類)?|その他野菜(類)?|ねぎ|根深ねぎ)(、.*)?を除く'
と単純化できます。
投票数:0 平均点:0.00

投稿ツリー

  条件検索へ