[討論] 複選值的儲存方式與比對

作者: JYHuang (夏天到了,冷不起來了說)   2014-08-30 08:29:18
網頁上不管是checkbox或是multi-select,要將所選的值存入資料庫。
目前想到的方式有兩種
一種是在資料庫開個表存主鍵和值。
一個是用php的serialize(或是implode)轉成字串存在欄位。
前者比較直覺,SQL搜尋也比較容易(用WHERE `field` IN (A,B) 就好)
不過如果有一堆選項的話要開一堆表(或單一表用鍵值隔開)
在用POST更新時 除非是一次全部洗掉重加
也需要判斷(存在的取消,不在的新增)之類的情類的。
後者比較省資料庫的空間
不過搜尋跟比對上比較麻煩(要用 `field` like A or `field` like B
單筆更新的話也是整欄要洗掉重丟值
取值時則是要先判斷是否能夠unserialize.
除了這兩種方式外
不知各位還有什麼樣的作法?
用enum,set?
其實還是有點不清楚SET屬性欄位如何作複數值的條件搜尋
作者: tkdmaf (皮皮快跑)   2014-08-30 09:27:00
還有一個就是轉json字串了,搜尋方式和serialize相同好處大概就是可以直接提供給任意語言直接分析吧。缺點是……如果你進資料庫前沒先處理好中文的話......
作者: liaosankai (低溫烘焙)   2014-08-30 12:39:00
set,enum +1

Links booklink

Contact Us: admin [ a t ] ucptt.com