2010-10-29 182 views
2

我有一個表格填寫哪個有幾個輸入文件和20個複選框我的問題是如何組織mysql中選中的複選框的記錄和什麼是使用php搜索它們的最佳方式。你可以給我一個例子嗎?在MySQL中存儲數據

+0

更多詳情。通常會選擇多少個這些複選框?你需要他們什麼?他們是否以任何方式與其他輸入字段相關?表格中會存儲多少條記錄? – joni 2010-10-29 07:41:50

+0

你能提供更多的細節嗎?複選框是否動態?也就是說,表單本身來自數據庫? – Nigel 2010-10-29 07:44:02

+0

可以_you_給你一個你想要做的代碼的例子嗎? – lbedogni 2010-10-29 07:44:57

回答

0

您可以使用單個BIGINT字段,讓每一位代表屬性的特徵之一。

比方說,你定義的屬性如下

1 = furnished (000001b) 
2 = with garage (000010b) 
4 = new construction (000100b) 
8 = ... (001000b) 
16 = ..... (010000b) 

因此,如果該字段的第一位是1,這意味着該屬性配,如果第3位是1,那麼它是一個新的建設等上。

您使用位運算符來檢查每一個特徵,即

SELECT * FROM property WHERE characterization & 2 

將車庫返回的屬性。同樣

SELECT * FROM property WHERE characterization & 5 

將返回是新建築,並且還配備(嗯..嗯,你的想法:-))性能。

請記住,BIGINT是64位,因此在同一字段中不能有超過64個不同的表徵。

+0

這違反了第一次NF - 如果沒有充分的理由你永遠不應該這樣做 – symcbean 2010-10-29 09:11:59

+0

夠正確。我同意這個解決方案對於這個特殊問題可能不太理想。 – Frode 2010-10-29 09:41:25

-1

如果它們不在不同的組中,但有很多選項,那麼你可以將它們存儲爲一個字符串,如| option1:yes | option2:no | ....你可以很容易地查詢不同的選項,如WHERE選項LIKE' %| option1:yes |%',或類似的東西。

+0

你可以給我一些搜索的例子嗎? – Peter 2010-10-29 08:55:07

+0

你想要搜索什麼?正如我所說,如果您正在尋找某個選項,只需將WHERE選項LIKE'%| option1:yes |%'添加到您的查詢中,其中選項是表列,option1是您正在查找的選項。 – 2010-10-29 10:08:00

+0

非常低效的方法。使用LIKE'%...%'獲取值非常慢,應該避免這種情況,並且只能在特殊情況下使用。 – Markus 2011-05-20 20:01:49

3

MySQL是一個關係數據庫,爲什麼要存儲所有這些字符串?

什麼是這樣的:

假設您的複選框被水平放置。所以在數據庫中對待它們相當直觀。假設你的表格是這樣的:

  1. 你喜歡什麼樣的食物(多個答案可能)?

    ØØ比薩麪食ØØ壽司沙拉

假設有人喜歡一切,但Sushi.Someone人可能只喜歡壽司

所以在數據庫中的結果表可能看起來像:

id(PK) user  question  col  answer 
1  someone  1    1   1 
2  someone  1    2   1 
3  someone  1    3   0 
4  someone  1    4   1 
5  someoneelse 1    3   1 

答案是某些標記在檢查框時爲1,如果不是,則爲0。

我只是在猜測你的意思是不是每個人都這麼做,所以如果你想更精確一點,或許我可以給出更好的答案。

+1

+1:一種可行,高效和可擴展的方法 – symcbean 2010-10-29 09:13:11