SQL中的递归查询

时间:2013-08-05 09:40:36

标签: mysql

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

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

  • 用户[1]:带有产品的仓库[1] - >用户[2]的仓库[1]的权限[1],加[1]
  • 用户[2]:能够看到添加[1] |的仓库[1]仓库[2]“共享”来自权限[1] - >仓库[2]的权限[2]用户[2]宽度添加[2]
  • 用户[3]:能够看到仓库[2]宽度加法[1] *加法[2]

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

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

  2. 见上文

答案 1 :(得分:0)

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

相关问题