2012-02-22 86 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,因为您正在使用字符串搜索功能。

相关问题