创建mysql连续数字表
嗨,我已经创建了一个名为allposs的表,其中包含6/49乐透的所有可能的乐透结果,看起来很简单创建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
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
如果要使用单独的查询,请将条件更改为
,其中continuous_count=3
(例如) 因为列中的数字是按顺序排列的-即n1如果要使用单独的查询,请将条件更改为
,其中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,然后插入到中,还是编辑您的示例并一次完成所有工作。?要一次完成所有工作,请使用创建另一个表选择…
语法(有关详细信息,请参阅链接),谢谢