2014-01-06 84 views
0

我有一個存儲用戶的郵件一個MySQL表:單個變量存儲多個值(PDO)

user_id | user_phonenumber 
---------------------------- 
id1  | 555-123456789 

我想允許用戶存儲多個PHONENUMBERS,我不希望限制數量用戶可以關聯的數字。

什麼是構建我的數據的最佳方式,以及查詢如何在PDO中工作?

例如,我應該使用逗號分隔符將它們全部存儲在同一個字段中,然後在返回查詢時解析輸出,還是應該使用另一個表並將每行作爲具有普通user_ids的單獨數字?那麼如何查找工作(如果可能,請提供示例代碼)?

謝謝

+1

使用一個表,一排每個電子郵件地址爲每個用戶。有逗號分隔的列表是一個噩夢(例如,如果你想找到用戶的電子郵件地址爲[email protected],你將需要使用find_in_set或LIKE與前導和尾隨%符號 - 這兩個都不會使用索引並會緩慢) – Kickstart

回答

1

通常RDBMS系統被設計爲訪問字段/行。當你開始打破數據字段鏈接/一致性/邏輯時,一切都將變得更加困難。 我的意思是當你開始在單個字段中存儲更多的數據。

但是你知道你的系統的未來。它可能會發生,你永遠不會需要訪問例如第一個電話號碼,如果你可以在任何地方作爲一個blob處理它,那麼它可以很好地存儲更多的價值在一個領域。

無論如何如果這不是一項家庭作業或類似的短期生活任務,那麼你應該選擇1電話號碼/ 1記錄的方法。

我的意思是這樣可以面向未來:

create table user_phonenumbers(
    id   auto_increment primary key. 
    user_id  integer references user(id), 
    phonenumber varchar(32) 
); 
+0

謝謝,所以假設我有一個單獨的表與2個phonenumbers爲1 id,查詢將是什麼樣子? – alias51

+0

我添加了一個示例表結構。您也可以從這個新表中正常選擇。我不明白你的問題100%... –

+0

對不起,我的意思是說,我想從user_phonenumbers返回所有的聲音,PDO聲明怎麼看? – alias51

0

是的,使用另一個表來存儲用戶的電話號碼。 使用內部連接來查找,這將是很好的。