2010-07-03 71 views
2

這對我來說有點難,我可能會用完全錯誤的方式去解決。搜索列格式

我在數據庫中存儲了一組選項,其中每個選項都是它自己的列。但是,用戶可以更改選項的數量,因此我需要一種允許PHP始終選擇所有選項的方法。

比方說,我有這些列:options_dialog_1,options_dialog_2,options_dialog_3,options_dialog_4

可能有不同數量的這些對話框選項列,例如,另一個叫options_dialog_5可以添加。

如何根據列名格式選擇所有對話框選項列?

回答

3

我認爲你在這裏有一個數據庫設計問題;重複這樣的列總會導致麻煩。我想你需要兩個表,一個是用戶,一個用於定義是這樣的選項...

USERS 
    id 
    name 

OPTIONS 
    id 
    user_id 
    option_dialogue_number 
    option_dialogue_value 

那會使列成行,這是相當容易得到的。

+0

我看,我會去做這 – Matt 2010-07-03 12:36:25

+0

這是一個入門主題... http://www.databasedev.co.uk/database_normalization_basics.html – 2010-07-03 12:54:16

0

我不知道我是否理解這個問題。您是否在尋找

SELECT * FROM options_table 

喜歡的東西(人造SQL - 不會工作

SELECT (SELECT column_names where column_name LIKE 'options_dialog%') 
FROM options_table 

的聲音,我並不可行(雖然我相信it's possible不知)。如果您需要此選項,請考慮refactoring the database designmaybe use a bitmask將選定選項存儲在單個列中。

+0

它會工作,但表格相當大,*是非常緩慢..我想我可以使用不同的表格選項,雖然 – Matt 2010-07-03 12:35:55

0

Brian's answer真的會在更長的時間內給你帶來好處。但是如果你需要很快看到一些東西,你可以查看「元數據字典」(存儲關於所有其他表,列等信息的表)。你可以從第一個查詢中獲得列的列表,並用它來構建第二個列。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mytable' AND COLUMN_NAME LIKE 'options_dialog%' 

訪問manual on INFORMATION_SCHEMA獲取更多好吃的東西。