Php 选择仅包含某些产品的桶

Php 选择仅包含某些产品的桶,php,mysql,sql,Php,Mysql,Sql,我需要帮助找到开发脚本的最佳解决方案。 假设我们有3个桶(3不是一个固定数字,桶的数量将定期更改): Bucket1、Bucket2、Bucket3. 每一个都包含一些产品: Bucket1: apple, lime, tomato Bucket2: tomato, lemon, cuccumber Bucket3: bread, salami, coffee 我将使用输入类型:text从键盘获取一些产品,如下所示: 苹果、柠檬、面包、西红柿、意大利腊肠、咖啡、酸橙 我需要找到一种方法来开发S

我需要帮助找到开发脚本的最佳解决方案。 假设我们有3个桶(3不是一个固定数字,桶的数量将定期更改): Bucket1、Bucket2、Bucket3.

每一个都包含一些产品:

Bucket1: apple, lime, tomato
Bucket2: tomato, lemon, cuccumber
Bucket3: bread, salami, coffee
我将使用
输入类型:text
从键盘获取一些产品,如下所示:

苹果、柠檬、面包、西红柿、意大利腊肠、咖啡、酸橙

我需要找到一种方法来开发SQL数据库和PHP脚本,以便它只从列表中选择只包含产品的bucket。它可以包含更少,但不能包含更多,并且可以在“输入类型:文本”列表中找到所有存储桶项

因此,这将只选择Bucket1和Bucket3

我最大的困难是开发数据库模式。你能不能给我一个想法,让我有一个开始的路径


我可以分解
输入
值,这样我就有了一个包含所有必需项的数组,但剩下的我真的被卡住了

方案应类似于:

CREATE TABLE buckets (
    bucket_num INTEGER NOT NULL,
    product VARCHAR(30) NOT NULL,
    UNIQUE KEY(bucket_num, product)
);
这将有如下行:

bucket_num  product
1           apple
1           lime
1           tomato
2           tomato
2           lemon
2           cucumber
桶的数量或桶中产品的数量没有限制

从产品列表中获取存储桶的查询为:

SELECT DISTINCT bucket_num
FROM buckets
WHERE product IN ('apple', 'lemon', 'bread', 'tomato', 'salami', 'coffee', 'lime')
AND bucket_num NOT IN (
    SELECT bucket_num
    FROM buckets
    WHERE product NOT IN ('apple', 'lemon', 'bread', 'tomato', 'salami', 'coffee', 'lime')
)
另一种书写方式是:

SELECT bucket_num, 
    COUNT(*) AS total_products,
    SUM(product IN ('apple', 'lemon', 'bread', 'tomato', 'salami', 'coffee', 'lime')) AS matching_products
GROUP BY bucket_num
HAVING total_products = matching_products

非常感谢。关于这个问题,还有一个问题:它也会返回Bucket2吗?我误解了你想要的,我会修正我不希望它返回Bucket2,我只希望它返回Bucket1和Bucket3。它只会返回一个bucket,前提是它的所有内容都能在列表中找到。我现在明白了。你没看到我修正了答案吗?谢谢!我真的很感激!