检查2号码算法

时间:2014-04-23 09:17:32

标签: php mysql node.js algorithm bookshelf.js

我在db上有2个字段。次要和主要:

Minor, Major
0,0
1,0
2,0
3,0
4,0
5,0
7,0
8,0
...
65536,0
0,1
1,1
2,1
3,1
4,1
...
65536,1
0,2

比较这个的最佳方法是什么。我在Bookshelf.js上这样做,但在php或ruby中也欢迎。我需要检查当前情况,获得更大的主要内容并添加次要+ 1,如果不是65536其他次要是0主要获得主要+ 1。

提前致谢。

编辑: 我必须将主要和次要保存到各个领域。他们为每个注册的用户增加。

例如。     用户

id, username,minor,major
1,  john , 0, 0
2, mike, 1, 0
....
65537, jeff, 65536,0

现在是汤姆的,主要的增量是因为最后一个小盘子是65536。

65538, tom, 0 , 1

我不知道如何解释更多。

2 个答案:

答案 0 :(得分:1)

我绝对 肯定不会理解这个问题,但这里有一些关于限制整数值范围的想法:

  • 与许多语言一样,MySQL有一些UNSIGNED SMALLINT数据类型,它们保存2个字节的值,即0到65535( 65536!)
  • 大多数编程语言都有"模数"运算符(% - php mysql),允许您收集整数除法的其余部分。例如,... % 65536将返回0到65535之间的值。如果您确实需要0到65536之间的值,则会改为编写... % 65537
  • 您可以使用掩码运算符("按位和" & - php mysql)。例如,... & 0xFFFF将仅保留数字的两个最低有效字节 - 实际上执行等价的"模65536"操作(结果介于0和65535之间)

答案 1 :(得分:0)

$magicNumber = 65536;
$sql = "
SELECT
  MAX(userIndex) userIndex
FROM (
 SELECT 
   (Minor + (Major * ".$magicNumber.")) AS userIndex
 FROM TableName
) AS innerSelect
";

运行sql会给你当前最高的userIndex,假设它是145323。 现在将此增加1,您就拥有$newIndex = 145324

这为您提供当前最高的索引。现在可以像这样计算字段:

$major = (int)($newIndex / $magicNumber);
$minor = $newIndex % $magicNumber;