2012-02-22 84 views
0

我有2張桌子。一張桌子包含美國的所有州。另一張表只是這些州的東西清單。MySQL - 如何查詢多值字段以匹配另一個表的主鍵?

我的表結構看起來是這樣的:

tbl_states - stateID (PK), stateName 
tbl_stuff - stuffID, stuffName, relState 

值這個樣子

1 | Alabama 
2 | Georgia 
3 | Maryland 

的relState列涉及tbl_states.stateID列,我有它在這種格式。我打算有一個webform來選擇多個狀態並將狀態中的內容分配給狀態。

1 | This is some stuff | 1,2 [ and this stuff is only AL, GA. ] 

所以我想弄清楚爲此編寫select語句的最佳方法。有沒有辦法嚴格使用mysql?

+0

如果我正確讀取它,relState列是否包含諸如「| 1,2 [這個東西只有AL,GA。]」的值? – 2012-02-22 21:11:12

回答

2

數據庫中的多值字段是一個壞主意。相反,解決這樣的狀態和東西之間的許多一對多的關係:

enter image description here

+0

偏題:你如何快速創建數據庫圖表? – 2012-02-22 21:17:00

+0

@BD - relState將包含一個值,如1,2,3,5,10。 – Robbiegod 2012-02-22 21:17:31

+0

@BD。 Microsoft Visio。 – 2012-02-22 21:18:07

0

我碰到這個職位來到,而搜索到這個做自己,想通第二個答案將是有益的。儘管多值領域確實降低了搜索效率,影響可擴展性並且促進了數據完整性問題,但是對於簡單性,報告和與其他系統集成而言,它們可能是必需的,就像我的情況一樣。

假設表:

Table: States 
Id   Name 
235325235 'Alabama' 
457457432 'Georgia' 
334634636 'Maryland' 



Table: Stuff 
Id Text       StateIds 
1 'Some stuff'     '235325235' 
2 'Some Stuff for two states'  '235325235,457457432' 

下面的查詢將返回所有東西阿拉巴馬

SELECT * FROM Stuff WHERE FIND_IN_SET('235325235', Stuff.StateIds); 

請注意,我複雜的ID的更多做的唯一性較低的概率,我會建議使用GUID/UUID,因爲您正在使用字符串搜索功能。

相關問題