创建mysql连续数字表

创建mysql连续数字表,mysql,Mysql,嗨,我已经创建了一个名为allposs的表,其中包含6/49乐透的所有可能的乐透结果,看起来很简单 create table allposs ( `id` mediumint (8) unsigned NOT NULL, `n1` tinyint (3) unsigned NOT NULL, `n2` tinyint (3) unsigned NOT NULL, `n3` tinyint (3) unsigned NOT NULL, `n4` tinyint (3) unsigned NOT N

嗨,我已经创建了一个名为allposs的表,其中包含6/49乐透的所有可能的乐透结果,看起来很简单

create table allposs (
`id` mediumint (8) unsigned NOT NULL,
`n1` tinyint (3) unsigned NOT NULL,
`n2` tinyint (3) unsigned NOT NULL,
`n3` tinyint (3) unsigned NOT NULL,
`n4` tinyint (3) unsigned NOT NULL,
`n5` tinyint (3) unsigned NOT NULL,
`n6` tinyint (3) unsigned NOT NULL,
key `id` (`id`)
) engine=myisam;
创建一个过程来生成结果并将其放入表中 这很有效

现在我需要使用这个表的结果制作其他表

创建一个表“filter1”,该表包含连续的1,2,3,4,5,6/44,45,46,47,48,49的所有结果
和另一个“过滤器2”,它有5个连续的1,2,3,4,5,25,/1,10,11,12,13,14,然后4个连接1,2,3,4,13,23,/1,16,17,18,19.49等等

一旦我创建了所有这些,我需要查看/选择“allposs”表-减去“filter1”、“filter2”等

我对mysql php非常陌生,没有钱支付专业人员的费用,所以我尝试自己去做,但我认为这会花很长时间,因为我在过去的两周里一直在寻找解决方案。 我有非常基本的编程技能,但决心学习。 请不要吝啬任何帮助。
我在Ubuntu11.4上使用的是mysql 5.1.54,这将是相当慢的查询,因为您正在一个相当大的表中搜索

查找所有6个数字都是连续的行

慢:


更快:

SELECT 
      ap.*
FROM 
      allposs AS ap
  JOIN
      num
    ON ( (n1,n2,n3,n4,n5) = (i,i+1,i+2,i+3,i+4) AND n6 > i+5 )
    OR ( n1 < i-1 AND (n2,n3,n4,n5,n6) = (i,i+1,i+2,i+3,i+4) )
在您的表上添加一个复合索引
(n1、n2、n3、n4、n5、n6)

同时添加一个
(n2,n3,n4,n5,n6)
索引,一个
(n3,n4,n5,n6)
索引等,直到一个
(n6)
索引

然后,创建一个只包含一列和49行的表:

CREATE TABLE num
  ( i TINYINT
  , PRIMARY KEY (i)
  ) ;
然后用这个:

SELECT 
      ap.*
FROM 
      allposs AS ap
  JOIN
      num
    ON (n1,n2,n3,n4,n5,n6) = (i,i+1,i+2,i+3,i+4,i+5)

查找5个数字连续的行

慢:

更快:

SELECT 
      ap.*
FROM 
      allposs AS ap
  JOIN
      num
    ON ( (n1,n2,n3,n4,n5) = (i,i+1,i+2,i+3,i+4) AND n6 > i+5 )
    OR ( n1 < i-1 AND (n2,n3,n4,n5,n6) = (i,i+1,i+2,i+3,i+4) )
选择
美联社*
从…起
allposs AS ap
参加
号码
ON((n1,n2,n3,n4,n5)=(i,i+1,i+2,i+3,i+4)和n6>i+5)
或者(n1


如果希望访问这些行而不必每次运行查询,则可以将这些查询与变体一起使用,以填充更多的表。

这些查询将相当慢,因为您正在一个相当大的表中搜索

查找所有6个数字都是连续的行

慢:


更快:

SELECT 
      ap.*
FROM 
      allposs AS ap
  JOIN
      num
    ON ( (n1,n2,n3,n4,n5) = (i,i+1,i+2,i+3,i+4) AND n6 > i+5 )
    OR ( n1 < i-1 AND (n2,n3,n4,n5,n6) = (i,i+1,i+2,i+3,i+4) )
在您的表上添加一个复合索引
(n1、n2、n3、n4、n5、n6)

同时添加一个
(n2,n3,n4,n5,n6)
索引,一个
(n3,n4,n5,n6)
索引等,直到一个
(n6)
索引

然后,创建一个只包含一列和49行的表:

CREATE TABLE num
  ( i TINYINT
  , PRIMARY KEY (i)
  ) ;
然后用这个:

SELECT 
      ap.*
FROM 
      allposs AS ap
  JOIN
      num
    ON (n1,n2,n3,n4,n5,n6) = (i,i+1,i+2,i+3,i+4,i+5)

查找5个数字连续的行

慢:

更快:

SELECT 
      ap.*
FROM 
      allposs AS ap
  JOIN
      num
    ON ( (n1,n2,n3,n4,n5) = (i,i+1,i+2,i+3,i+4) AND n6 > i+5 )
    OR ( n1 < i-1 AND (n2,n3,n4,n5,n6) = (i,i+1,i+2,i+3,i+4) )
选择
美联社*
从…起
allposs AS ap
参加
号码
ON((n1,n2,n3,n4,n5)=(i,i+1,i+2,i+3,i+4)和n6>i+5)
或者(n1


如果您想访问这些行而不必每次运行查询,则可以将这些查询与变体一起使用,以填充更多的表。

因为列中的数字是按顺序排列的-即n1 此查询将首先返回具有6个连续数字的所有组合,然后返回具有5个连续数字的所有组合,以此类推,并且不会返回任何没有连续数字的组合

得到这些信息后,您应该能够编写php来处理这些行


如果要使用单独的查询,请将条件更改为
,其中continuous_count=3
(例如)

因为列中的数字是按顺序排列的-即n1 此查询将首先返回具有6个连续数字的所有组合,然后返回具有5个连续数字的所有组合,以此类推,并且不会返回任何没有连续数字的组合

得到这些信息后,您应该能够编写php来处理这些行


如果要使用单独的查询,请将条件更改为
,其中continuous_count=3
(例如)

不要创建表。用于按所需方式显示数据。你还需要做一个,这是一个设置操作。感谢Ben的评论,但我需要这些表来做其他事情,链接到我正在尝试设置的网站,我认为这会更简单、更快,因为我需要创建和使用23个不同的过滤器/表。好的,我想我需要左连接,不知怎么的,我查看了视图,但不认为这是我想要的需要。@MarkRobinson:您的数字是以
(2,3,4,6,12,45)
的形式存储在表中的,还是可能有些行不是按递增顺序存储的,比如
(2,4,3,45,12,6)
?@ypercu只需检查一下,是的,它们都是按2,3,4,6,12,45的顺序存储的,而不是按2,4,3,45,12,6的顺序存储的。如果我能找到一个只有两个连续数字的例子,我就可以把其余的都算出来。用于按所需方式显示数据。你还需要做一个,这是一个设置操作。感谢Ben的评论,但我需要这些表来做其他事情,链接到我正在尝试设置的网站,我认为这会更简单、更快,因为我需要创建和使用23个不同的过滤器/表。好的,我想我需要左连接,不知怎么的,我查看了视图,但不认为这是我想要的需要。@MarkRobinson:您的数字是以
(2,3,4,6,12,45)
的形式存储在表中的,还是可能有些行不是按递增顺序存储的,比如
(2,4,3,45,12,6)
?@ypercu只需检查一下,是的,它们都是按2,3,4,6,12,45的顺序存储的,而不是按2,4,3,45,12,6的顺序存储的。如果我能找到一个只有两个连续数字的例子,我就可以把其余的都算出来。谢谢,那太好了,我理解了6个数字的例子,但5个数字的例子有点混乱,但我还在学习。例如,我如何将结果放入新的表过滤器1中。我是先创建表过滤器1,然后插入到中,还是编辑您的示例并一次完成所有工作。?要一次完成所有工作,请使用
创建另一个表选择…
语法(有关详细信息,请参阅链接),谢谢