让我们这样来解决问题,我有一个包含 2 种配料的披萨。这些成分存储在我的 PHP 中的数组中,在我的 MySQL 中,我以二进制形式存储这些数组位置总和的 Int。
我的意思是:
$ingredients = ["cheese","pepperoni","bacon","onion"];
如果我的披萨有奶酪和培根,我存储值 2^0 + 2^2 = 5。
我通过在我的数据库中搜索所有值为 5 的比萨饼并获得快速而酷的搜索来实现这一目标。
我的问题是:如果我有大量的原料怎么办?即使我只使用其中的 2 个,如果它们位于数组的较大位置(比如 100 个),我也会被搞砸。
对于那个特定问题,您会使用哪种解决方案?
P.D.- 显然我不是在谈论披萨公司,我确实关心 ms 速度
最佳答案
你最好制作规则的、相关的表格(pizza
、pizza_ingredients
、ingredients
)
这对您甚至 MySQL 来说都会简单得多:
# simple query to find pizza's with specified ingredients
SELECT
*
FROM
pizza_ingredients tpzi
LEFT JOIN
pizza tp ON
tp.pizza_ID = tpzi.pizza_ID
WHERE
tpzi.ingredient_ID IN (1,2,3,45)
表格示例:
表披萨
:
- pizza_ID,pizza_name
表pizza_ingredients
':
- pizza_ingredient_ID, pizza_ID, ingredient_ID
表成分
- ingredient_ID, ingredient_name
有趣的是..如果你试图找到带奶酪的比萨饼:
标准:
SELECT
*
FROM
pizza_ingredients tpzi
LEFT JOIN
pizza tp ON
tp.pizza_ID = tpzi.pizza_ID
WHERE
tpzi.ingredient_ID = 1
你的想法:
SELECT
*
FROM
pizza
WHERE
pizza_ingerdients MOD = 0
会更慢:)
关于php - 大于 bigint 的 MySQL 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12230479/