php - 大于 bigint 的 MySQL 字段

标签 php mysql sql database architecture

让我们这样来解决问题,我有一个包含 2 种配料的披萨。这些成分存储在我的 PHP 中的数组中,在我的 MySQL 中,我以二进制形式存储这些数组位置总和的 Int。

我的意思是:

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

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

我通过在我的数据库中搜索所有值为 5 的比萨饼并获得快速而酷的搜索来实现这一目标。

我的问题是:如果我有大量的原料怎么办?即使我只使用其中的 2 个,如果它们位于数组的较大位置(比如 100 个),我也会被搞砸。

对于那个特定问题,您会使用哪种解决方案?

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

最佳答案

你最好制作规则的、相关的表格(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_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/

相关文章:

mysql - 从多对多关系中获取特定值

mysql - SELECT * FROM 表名 WHERE 'num+sometext'

sql - 构建复杂的 Rails SQL

javascript - 将 PHP 的 MySQL 结果插入 JavaScript 数组

javascript - Parse.com 在循环中保存对象,仅保存最后一个对象

php - 使用数组内爆构建插入查询

mysql - 我可以将十个相似的 SQL 查询合并为一个吗?

php - PHP 更新数据库时遇到问题

asp.net - 所有数据都不适合数据 GridView

php - 在php中从mysql数据库下载excel表