filter一般點寫比較好?

例如有個咁既case

有三組filter option, 全部係checkbox
1. productName=['p1', 'p2', 'p3']
2. color = ['red', 'blue', 'green']
3. weight = ['500g', '600g', '700g']

database tabe係咁樣
Product:
name, color, weight
p1, red, 500g
p1, blue, 500g
p2, green, 700g
p3, blue, 600g
p3, red, 500g

而filter方法亦都係最常見的: 如果甚麼都不選, 就乜都唔filter, 如果是但剔左一個, 就只出現符合條件的

我曾經寫過兩個system既filter, 都係用上面依種filter

第一次, 係將所有option收集起黎, 用string 砌成sql 的where部份, 從而做到filter既效果
但由於覺得依個方法好笨拙, 而且唔夠elegant, 所以第二次就改用另一個方法

第二次, 係將每組option分別整成array, 將再所有record select出黎(因為data唔多, 所以可以咁做)
最後就係loop個result set 和依幾組array, 不過, 原來咁搞法, 個logic都幾複雜. 所以, 唔知係我唔夠清晰定係點, 寫左好耐都有bug, 最後就用返第一種方法


所以, 寫filter有沒有一D比較generic/smart既方法可以參考?

本帖最後由 tsangwailam 於 2014-9-22 11:52 編輯

I always use IN for SQL.

SELECT * FROM products
WHERE color IN ('red','blue','green') AND productName IN ('p1','p2');

I don't think pull out all the results and do search in script is a smart way.

TOP

I always use IN for SQL.

SELECT * FROM products
WHERE color IN ('red','blue','green') AND productNa ...
tsangwailam 發表於 2014-9-22 11:50



係, 我寫既就係用依種做法, 不過會唔會有更好既做法?



                $criteriaArr=array();
                $criteriaString='';

                $colors=$_POST('color');
                $colorCriteria='';
                if($colors)
                {
                        foreach($colors as $color)
                        {
                                $colorCriteria.=",'".$color."'";
                        }
                        $colorCriteria=substr($colorCriteria,1);
                        $colorCriteria= ' color in ('.$colorCriteria.')';
                        array_push($criteriaArr, $colorCriteria);
                }
                foreach($criteriaArr as $criteria)
                {
                        $criteriaString.= ' and '.$criteria;
                }

TOP

本帖最後由 tsangwailam 於 2014-9-22 21:31 編輯

用sql係最efficient ,你想囉哂record 先做,record多就勁慢,正常唔會禁做

你用join() 一次join array 就得 唔駛loop.

TOP

3. local database

TOP

1. 說真的,如果你連最基本的 SQL where filter 都覺得唔夠好﹐咁又何必用 SQL 呢?
2. 你說的是 checkbox 嗎? 多選還是單選? 怎麼看起來像是 Radio Button?

TOP

1. filter 呢D一定要用SQL做快, 仲要做埋indexing, 因為今日你覺得OK 好少data, 第日冇人敢包唔會多,multiple filter其實可以好複雜 同一個field 有幾個filter value,多過一個field 有filter value,要同時Match value或者 其中一個Match value就出result,組合可以好多.所以Coding 方面可以試下寫function做第一步先做幾個value同時間Match,(例如: field_A = 1 and field_A = 3)因為多數基本會用呢個多D.
2. Radio 係單一value,checkbox 是 multiple value,要因應需求選用.

TOP

係, 我寫既就係用依種做法, 不過會唔會有更好既做法?



                $criteriaArr=array();
                $criteriaString='' ...
3ldk 發表於 2014-9-22 18:52



    PHP 可以的話 就用 啲 Framework 吧

咁樣自已砌 string  ,  又危險又費時

除非你當學野吧

TOP

PHP 可以的話 就用 啲 Framework 吧

咁樣自已砌 string  ,  又危險又費時  

除非你當學野吧 : ...
hihihi123hk 發表於 2014-9-24 16:22



我其實已經係用緊framework

但咁複雜的criteria, 都係要自已砌出黎, 依度我已經淨係show 最簡單既case出黎, 等大家易D理解, 再複雜果D, 例如數字range, 文字like search都未講, 就已經係咁複雜

我都諗左好耐, 究竟除左自已砌string , 仲可以點樣做
結果最後都係諗唔到一個generic既mechanism去解決依個問題

如果你話 咁樣自已砌 string 係唔好, 點做先好? 會唔會係D library or framework係專門用黎做依D野?

TOP

相關文章