MySQL字段比bigint大

时间:2012-09-01 18:56:25

标签: php mysql sql database architecture

让我们以这种方式解决问题,我有一种比萨有2种类型的成分。这些成分在我的PHP和我的MySQL中以数组形式存储。我存储这些数组在二进制中的位置之和的Int。

我的意思是:

$ingredients = ["cheese","pepperoni","bacon","onion"];

如果我的披萨有奶酪和培根我会存储值2 ^ 0 + 2 ^ 2 = 5

我在数据库中搜索价值 5 的所有比萨饼,并获得快速而酷的搜索。

我的问题是:如果我有很多成分,该怎么办?即使我只使用其中的两个,如果它们位于阵列的较大位置(让我们说100),我就被搞砸了。

您会在该特定问题中使用哪种解决方案?

P.D.-显然我不是在谈论披萨公司,而是关心ms速度

3 个答案:

答案 0 :(得分:6)

您最好制作常规的相关表格(pizzapizza_ingredientsingredients

对你甚至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

  • pizza_ID,pizza_name

pizza_ingredients':

  • pizza_ingredient_ID,pizza_ID,ingredient_ID

ingredients

  • 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

会慢一些:)

答案 1 :(得分:2)

在这种情况下,人们应该在比萨饼和浇头之间实现多对多的关系。

答案 2 :(得分:1)

听起来你在谈论SET数据类型。 SET被输入并显示为以逗号分隔的名称列表,但它们在内部存储为整数位图,因此搜索速度很快。

但是,它们仅限于64个元素。如果您需要超过64个,则可以有多个列:ingredients1,ingredients2。