2013-08-05 46 views
2

database structure递归查询

SELECT 
    p.*, 
    MIN(wp.price * (1 + wpe.addition/100) * (1 + IFNULL(wpc.addition, 0)/100)) AS minimal_price, 
    COUNT(p.id) AS total_found 
FROM products AS p 
JOIN warehouses_products AS wp 
    ON p.id=wp.product_id 
JOIN warehouses_permissions AS wpe 
    ON wpe.warehouse_id=wp.warehouse_id 
LEFT JOIN warehouses_permissions_categories AS wpc 
    ON wpc.warehouse_permission_id=wpe.id 
WHERE wpe.user_id=1 AND (wpc.id IS NULL OR wpc.category_id=p.category_id) 
GROUP BY p.id 

问:我应该如何修改我的数据库结构和查询,如果我想添加这个功能:用户可以有“共享”仓库 - 仓库拥有来自给定warehouse_permission的产品。

  • 用户[1]:仓库[1]的产品 - >许可[1]仓库[1]一种用于用户[2]并加入[1]
  • 用户[2]:能够看到仓库[1]添加[1] |用户[3]:能够看到仓库[2]的宽度增加值[2]用户[3]:能够查看仓库[2]的宽度增加[1] *添加[2]

如果要共享共享仓库,则会开始递归。

任何想法?

回答

0
  1. 这将是一个OUTER JOIN。有两种类型:LEFT OUTER JOINRIGHT OUTER JOIN。与INNER关键字一样,OUTER关键字是可选的。对于每个LEFT JOIN,都有一个逻辑等效的RIGHT JOIN。因此,RIGHT JOIN s是非常罕见的。举例来说,比较SO上的LEFT JOINRIGHT JOIN的搜索结果。

  2. 见上面

+0

我知道OUTER JOINS,但仍然无法弄清楚如何得到想要的结果 – Ellis

0

我会合并warehouses_permissions & warehouse_permissions_categories将解决大部分问题。如果以后需要的话,你可以划分或提出其他结构。