我们在 MySQL 中有一个产品表,其中每一行都有一个以逗号分隔的选项值的字段,这些选项组合成这个产品。在下面的方案中,您可以看到两个表。逗号分隔值的字段是 option_ids,例如,这可能看起来像 2、5、6、23 或 4、2、76。这些数字是选项表中存在的选项。
产品:
|product_id|name|description|option_ids|price|
选项:
|option_id|type_id|label|group|pos|count|price|
我们得到的输入是一组独特的选项。我们想在 option_ids 中找到具有这组选项或其子集的每个产品。
我们现在这样做的方法是生成选项数组的幂集,以便我们拥有选项数组的所有可能组合。然后我们生成一个 mysql 查询,用于查询“OR WHERE”语句中的所有这些组合。
这里的问题是幂集呈指数增长,所以当我们有一个包含 16 个唯一选项的数组时,幂集给出了一个包含 65536 种可能性的数组。我们必须增加 php 的内存使用量才能正常工作,但现在我们遇到了 MySQL 问题,因为查询变得如此庞大。
有没有另一种方法来解决这个问题?
我希望我已经提供了足够的信息,如果没有,请询问!
编辑:第三张表会给我们带来同样的问题,因为我们需要找到子集......这并不是说一系列选项是一个产品,它可以是一个产品,但也可以是 2 或 3 个产品。例如:选项 1,2 制作产品 A,选项 2,3 制作产品 B,选项 4,5,6 制作产品 C。如果我们有选项数组 [1,2,4,5,6],我们希望找到产品 A 和 C。