今天在看這一篇http://www.dotblogs.com.tw/mis2000lab/archive/2008/11/18/searcheengine_checkboxlist_081118.aspx
有時文章為了解決單一問題, 所以不見得會寫得很完整, 通常需要的人看了之後仍需要自行修改後才能正確地解決自己的問題; 但有時愈簡單的問題, 使用者正因為沒有基礎, 所以根本沒有能力自行去修改, 這篇文章裡提到的便算是比較簡單的問題, 我在此做一些補充, 供初學者參考
1.資料庫最好要正規化
範例的 class 欄位,看起來用來存放該文章所屬類別, 若文章同時屬於多個類別,最好用另一個 table 來存放,不要用一個欄位
2.用 like 來篩選的注意事項
若 database 裡已經用一個欄位來存放文章所屬類別,而它的內容可能會是
科技,政治,娛樂
新聞, 國內新聞, 娛樂, 生活
從上述例子您可以發現, 若寫成
SELECT * FROM xxx WHERE [class] LIKE '%新聞%'
其實有可能找到被分類到"國內新聞"的文章, 並不符合您的需求, 因此建議欄位值存成
,科技,政治,娛樂,
,新聞, 國內新聞, 娛樂, 生活,
然後再
SELECT * FROM xxx WHERE [class] LIKE '%,新聞,%'
3. 若篩選條件有多個時,會發生錯誤
例如
SELECT * FROM xxx WHERE id=3 AND [class] LIKE '%,新聞,%'
看起來沒什麼錯誤, 但其實當使用者勾選多個checkbox時, 會變成
SELECT * FROM xxx WHERE id=3 AND [class] LIKE '%,新聞,%' OR [class] LIKE '%,娛樂,%'
其實這是很容易造成誤判的, 所以最好是寫成
SELECT * FROM xxx WHERE id=3 AND ([class] LIKE '%,新聞,%' OR [class] LIKE '%,娛樂,%')
才能查出您真正要的記錄