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
问题:如果我想添加此功能,我应该如何修改数据库结构和查询:用户可以拥有“共享”仓库 - 仓库中包含来自给定仓库_许可的产品。
如果想共享共享仓库,则递归开始。
有什么想法吗?
答案 0 :(得分:0)
那将是OUTER JOIN
。有两种类型:LEFT OUTER JOIN
和RIGHT OUTER JOIN
。与INNER
关键字一样,OUTER
关键字是可选的。对于每个LEFT JOIN
,逻辑上等效RIGHT JOIN
。因此,RIGHT JOIN
很少见。举例来说,在SO上比较LEFT JOIN
和RIGHT JOIN
的搜索结果。
见上文
答案 1 :(得分:0)
我会合并warehouses_permissions& warehouse_permissions_categories可以解决大部分问题。如果需要以后你可以划分或提出其他结构。