我想创建一个网站,其中的项目仅在特定区域/地区可用。 可通过以下模式选择这些项目可用的区域/位置:
等等......你可能有了这个主意。
现在我的问题是你如何使用MySql DB实现这样的结构?或者是否有更好的数据库模型和合适的GUI? (那将是完美的) 物品数量相当少(~20)。
当顾客访问该页面时,他将输入他的位置,并列出可用于其位置的每个项目。 如何为此目的查询?
非常感谢, FLO
答案 0 :(得分:1)
您可以使用以下列创建表格locations
:
id | type | name | parent_id
1 | 1 | State 1 | 0
2 | 1 | State 2 | 0
3 | 2 | County 1 | 1
etc
在此示例中,县1属于州1,“id 0”假定为“全国范围”。
使用该模型,创建用于设置项目可用性的GUI非常简单:首先按parent_id = 0
进行查询并将其作为列表提供,并使用其他nationwide
作为默认选项;如果选择了某个州,则会生成另一个列表,使用选定的ID作为parent_id
并提供state wide
作为默认选项等。用户点击“保存”后,获取最深级别id
和将其作为location_id
保存在项目表中。
但是,当涉及到实际获取项目列表时,它变得不那么简单了。例如,如果您的用户说他的位置是County 1
,那么您应该返回具有location_id
= 3,1或0的项目的组合结果,并通过parent_id向上移动树。如果您使用了支持递归查询的RDBMS,则可以在单个查询中获取这些查询; MySQL不支持,所以你必须通过创建一个循环来查询具有特定位置ID的items
,然后从位置选择parent_id
,并重复查询。 / p>
否定的一面是您不能使用该结构控制树的完整性。也就是说,您无法控制城市只能将县作为父级 - 尽管您可以创建插入/更新触发器来帮助解决这个问题。也可以创建一个循环(通过将项目相互教育),这可能会导致问题。
答案 1 :(得分:1)
Here您可以找到针对该问题的不同方法的相当详细的解释。基本上你的选择是a)构造一个ParentID / ChildID树,或b)一个嵌套集。因为,虽然其他rdbms系统支持递归MySQL没有(至少没有使用精心设计的存储过程),特别是因为你的数据似乎是非常静态的,即不会真正改变很多;我建议你采用嵌套方式。它会让你更轻松。