我在我們PHP/MySQL驅動的商店中非常努力地使用嵌套集查詢,我將以電子部分爲例。MySQL嵌套集搜索
類別存儲爲嵌套集模型(左,右和深度)。
隨着客戶導航通過實體店,他們可以按品牌,類別,價格範圍等篩選的產品清單
比方說,客戶是由索尼觀看的所有產品。索尼將擁有計算,電視,音頻和保護設備產品。
但是索尼產品不存儲在這些類別(但可能是),它們被存儲在這些主要類別的子類別,如:
Televisions > LCD > Widescreen
Televisions > CRT
Computing > Optical Drives > DVD-RW
Computing > Input Devices > Wireless > Keyboards
Audio > Portable > MP3
Household Appliances
客戶選擇索尼後,我希望他們有按類別來縮小選項,所以他們最初將有以下選擇:
Televisions
Computing
Audio
Household Appliances
但我只能這樣做帶回具體的類別列表查詢:
Widescreen
CRT
DVD-RW
Keyboards
MP3
Household Appliances
我需要的主要類別來展示,那麼如果客戶選擇電視,他們將得到的選擇:
LCD
CRT
誰能幫我這個問題,最好返回的信息儘可能快,與最小的遞歸(因此首先使用嵌套集合)或太多的查詢,我將非常感激。
下面是我用它來獲取子類別列表中查詢,如果它與數據庫的結構有助於:
select c.categories_id, cd.categories_name, c.parent_id, c.lft, c.rgt, c.dpth
from categories c
inner join categories_description cd on cd.categories_id = c.categories_id
inner join products_to_categories p2c on p2c.categories_id = c.categories_id
inner join products p on p.products_id = p2c.products_id
where cd.language_id='1'
and c.lft between 3489 and 3670
and c.categories_status = '1'
group by c.categories_id
order by sort_order, cd.categories_name
隨着數據庫原本是adjacancy模型結構,每個類別ID也有父如果簡化了任何內容,也會存儲ID。
謝謝。
我都有種設法得到它的工作,但它是非常緩慢!!任何想法索引或改變它的工作方式? – Paul 2011-06-15 14:14:52
選擇\t \t cd。*,祖先。* FROM \t \t'fec_categories'孩子 JOIN \t \t'fec_categories'祖先打開之間ancestor.'lft' child.'lft'和ancestor.'rgt' JOIN \t \t'fec_categories_description' CD上ancestor.'categories_id' = cd.'categories_id' JOIN上child.categories_id = p2c.categories_id \t \t fec_products_to_categories P2C JOIN \t \t fec_products上p.products_id = p2c.products_id WHERE \t \t p.'manufacturers_id' = 6 AND \t \t子頁。 '美食gories_status' = 1 AND \t \t ancestor.'categories_status' = 1 AND \t \t cd.'language_id' = 1 AND ancestor.'dpth' = 1 GROUP BY ancestor.'categories_id' ORDER BY \t ancestor.' lft' – Paul 2011-06-15 14:15:51
我最終放棄了這一點,轉而採用Bill Karwin的傳遞閉包表法,這更適合我們的要求。 – Paul 2011-06-30 10:25:15