我有3个数据库。
bundles
- 有关捆绑包的所有信息。bundle_items
(bundle_id
,item_id
) - 指定每个捆绑包中包含的项目。items
- 有关这些项目的所有信息。在一个声明中,我需要搜索10个bundles
,其中仅包含可用的项目。
items
有一个名为available
如果捆绑中的某个项目不再可用,我显然不希望任何人看到该捆绑包,因为它无效。
我还需要做一些其他的事情,比如计算所有项目的总成本(之后可以在php中执行此操作,但这不是真正的问题)
实现这样的目标的最佳方法是什么?我很高兴完全改变我的数据库布局,找到有用的东西。
答案 0 :(得分:0)
我们在三个表(子查询)之间进行简单的3连接,并将其用作WHERE子句。我们无法在子查询中进行限制,因为这将限制为10个订单项,而不是10个订单项。
子查询将获得包含至少一个不可用项的所有包,并且我们在外部选择中使用NOT IN排除那些
由于您没有发布商品和捆绑表的结构,我假设他们有相应的ID列
SELECT *
FROM bundles
WHERE bundle_id NOT IN
( SELECT b.bundle_id
FROM bundles b
JOIN bundle_items bi
ON b.bundle_id = bi.bundle_id
JOIN items i
ON i.item_id = bi.bundle_id
WHERE i.available = 0 )
LIMIT 10