我正在嘗試創建一個Web索引。在我的數據庫中的每個廣告客戶將能夠出現在幾類,所以我添加了一個categorys
列,在該列我將存儲分隔的類別「」所以它看起來像:從MySQL中選擇行
1,3,5
問題是,我不知道我應該如何選擇某個類別中的所有廣告客戶,例如:mysql_query("SELECT * FROM advertisers WHERE category = ??");
我正在嘗試創建一個Web索引。在我的數據庫中的每個廣告客戶將能夠出現在幾類,所以我添加了一個categorys
列,在該列我將存儲分隔的類別「」所以它看起來像:從MySQL中選擇行
1,3,5
問題是,我不知道我應該如何選擇某個類別中的所有廣告客戶,例如:mysql_query("SELECT * FROM advertisers WHERE category = ??");
您應該以另一種方式設計數據庫。看看Atomicity。
短:你不應該以1,3,5的形式存儲你的價值。
我不會給你一個答案,因爲如果你開始使用這種方式現在,你會碰到更嚴重的問題後。沒有冒犯:)
如果categories
是另一個數據庫表,你不應該使用這樣的純文本字段。爲此目的創建一個「數據透視表」,例如advertisers_categories
,將兩個錶鏈接在一起。運行安裝程序,你可以做一個查詢,如:
SELECT A.* FROM advertisers AS A
JOIN advertisers_categories AS AC ON AC.advertiser_id = A.id
WHERE AC.category_id = 12;
的advertisers_categories
的模式會是這個樣子:
# advertisers_categories
# --> id INT
# --> advertiser_id INT
# --> category_id INT
包括查詢+1(我不記得我的生活如何加入表XD) – stevendesu 2010-10-05 17:26:02
非常感謝你:) – Ben 2010-10-05 18:24:34
@Ben如果你喜歡它,接受答案。 :)從1代表來看,我想你剛從這裏開始。 – BBonifield 2010-10-05 19:33:18
你的執行情況,是會讓人很難和服務器的資源徵稅,以做你想做的事。
我建議創建一個表,將廣告客戶關聯到類別,然後在給定類別id值的情況下查詢該表以獲取該類別中的廣告客戶。
這是一個非常錯誤的方式來定義類別,因爲你的數組值不能被歸一化。 而是定義另一個名爲CATEGORIES的表,並使用JOIN表將CATEGORIES與ADVERTIZERS匹配。
只有這樣你才能正確選擇它。
希望這會有所幫助!
使用逗號分隔的值在SQL查詢中嚴格執行此操作是不可能的。您可以每行返回,並使用一個PHP腳本遍歷每行,使用explode($row,',')
,然後使用if(in_array($exploded_row,'CATEGORY'))
檢查該類別的存在。
更常見的解決方案是重構數據庫。你的想法也是二維的。您正在尋找的Many to Many Data Model
advertisers
-----------
id
name
etc.
categories
----------
id
name
etc.
ad_cat
------
advertiser_id
category_id
所以ad_cat將至少有一個(通常更多)每廣告主入口和至少一個(通常更多)每類條目,並在ad_cat每一個條目將一個廣告鏈接到一類。
然後,SQL查詢涉及從ad_cat中抓取所需的category_id(s)的每一行,並搜索其id在結果查詢輸出中的廣告商。
'並在該列中存儲由「,」分隔的類別''將這些歸一化爲單獨的表格會更好。 – 2010-10-05 17:20:11