我需要帮助才能找到开发脚本的最佳解决方案。 假设我们有3个桶(3个不是固定数量,桶的数量会定期更改): Bucket1,Bucket2,Bucket3。
每个产品都包含一些产品:
Bucket1: apple, lime, tomato
Bucket2: tomato, lemon, cuccumber
Bucket3: bread, salami, coffee
我将使用input type:text
从键盘中获取一些产品,如下所示:
我需要找到一种方法来开发SQL数据库和PHP脚本,这样它才会选择只包含列表中产品的存储桶。它可以包含更少但不是更多,并且所有桶项都可以在"输入类型的列表中找到:text"。
所以这只会选择Bucket1和Bucket3
我最糟糕的事情是开发数据库架构。请你能给我一个想法,这样我就可以开始了吗?
我可以爆炸input
值,这样我就会得到一个包含所有必需项目的数组,但我真的很不满意。
答案 0 :(得分:2)
该计划应该是这样的:
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