需求更改 - 在单个数据库表字段中存储2个不同的值

时间:2011-02-22 12:53:59

标签: mysql

我有一个MySQL表,其字段为unsigned tinyint(最大值:255)。

要求的典型变化。由于该表中有大量记录,我们需要创建一个新字段。但是对于应用来说这将是非常昂贵的(很多变化,很多工作)。

所以我们正在考虑将新值与旧值结合起来。

基本上在unsigned tinyint(最大值:255)中,我们需要存储:

  • 一个整数,可以是1,2,3或4
  • 一个可以跨越1到30的整数(包括限制)

要求是使用算法尽可能简单地获取和设置'组合'值。

你会怎么做? 如果可能的话,我不想使用任何二进制表示。

谢谢,

2 个答案:

答案 0 :(得分:2)

您可以使用32的倍数表示1-4并在顶部添加1-30 [1,1]将是33 [1,2]将是34
[1,30]将是62 [2,1]将是65
[2,30]将是94
[4,1]将是129
[4,30]将是158

这可行并且毫不含糊,但总的来说我真的认为你不应该像这样的黑客。添加列并更改代码。您将如何处理下一个需求变更?最后,您的软件将成为黑客的集合,无法再维护。

答案 1 :(得分:0)

让我们调用两个值x和y。

存储号码时执行以下步骤:

  1. 将x乘以100。
  2. 将结果1添加到y。
  3. 将结果存储在列中。
  4. 因此,如果x为3,而y为15,那么结果将得到315。您可以通过首先从数字中提取最后两位数字然后除以100来轻松解码,这将为您提供第一个数字。

    但是因为你必须在255之内拟合数字,你可以选择一个小于100的适当乘数。