[英]Hierarchical structure with (My)SQL database
我想創建一個網站,其中的商品僅在特定區域/地區可用。 這些項目可用的區域/位置通過以下模式選擇:
依此類推...您可能知道了。
現在我的問題是如何使用MySql DB實現這樣的結構? 還是有一個具有合適GUI的更好的數據庫模型? (那將是完美的)項目數量很少(〜20)。
當客戶訪問該頁面時,他將輸入其位置,並將列出該位置可用的所有項目。 用於此目的的查詢看起來如何?
非常感謝,Flo
您可以使用以下列創建表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
,然后重復該查詢。
不利的一面是您不能通過該結構控制樹的完整性。 也就是說,盡管您可以創建插入/更新觸發器來對此進行幫助,但您無法控制一個城市只能將一個縣作為父母。 也可以創建一個循環(通過將項相互育種),並可能導致問題。
在這里,您可以找到有關此問題的不同方法的相當詳細的說明。 基本上,您的選擇是a)構造ParentID / ChildID樹,或b)嵌套集。 因為,盡管其他rdbms系統支持遞歸,但MySQL卻不支持(至少不使用復雜的存儲過程),尤其是因為您的數據似乎是靜態的,即不會發生太大變化。 我建議您采用嵌套設置的方式。 這會使您的事情變得容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.