您好我已经创建了一个名为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
和另一个“filter2”有5个连续1,2,3,4,5,25,/ 1,10,11,12,13,14然后4consec 1,2,3,4,13,23,/ 1, 16,17,18,19.49等。
一旦我创建了所有这些,我需要查看/选择“allposs”表-minus“filter1”,“filter2”等。
我是mysql php的新手,并没有钱支付专业人员,所以我试图自己做,但我认为它将采取永远,因为我已经过了2周,并找不到解决方案。 我有非常基本的编程技巧但决心学习。 请任何帮助都会有所帮助。 我在ubuntu 11.4上使用mysql 5.1.54
答案 0 :(得分:1)
这些将是相当慢的查询,因为您正在一个相当大的表中搜索。
查找所有6个数字都是连续的行。
慢速:
SELECT *
FROM allposs
WHERE n2 = n1+1
AND n3 = n2+1
AND n4 = n3+1
AND n5 = n4+1
AND n6 = n5+1
更快:
在桌面上添加复合索引(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 *
FROM allposs
WHERE n2 = n1+1
AND n3 = n2+1
AND n4 = n3+1
AND n5 = n4+1
AND n6 > n5+1
UNION
SELECT *
FROM allposs
WHERE n2 > n1+1
AND n3 = n2+1
AND n4 = n3+1
AND n5 = n4+1
AND n6 = n5+1
更快:
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) )
如果您想要访问这些行,则可以将这些查询与 CREATE TABLE anothertable SELECT ...
或 INSERT INTO anothertable SELECT ...
变体一起使用来填充更多表格必须每次都运行查询。
答案 1 :(得分:0)
因为列中的数字是有序的 - 即n1&lt; n2等 - 你可以在一个查询中获得很多东西:
select *
from (select
id,n1,n2,n3,n4,n5,n6,
(n1=n2-1) + (n2=n3-1)+ (n3=n4-1)+ (n4=n5-1)+ (n5=n6-1) as consecutive_count
from allposs) x
) where consecutive_count > 0
order by consecutive_count desc, n1,n2,n3,n4,n5,n6;
此查询将首先返回包含6个连续数字的所有组合,然后返回包含5个连续数字等的所有组合,并且不会返回任何没有连续数字的组合。
有了这个,你应该能够编写你的php来处理行。
如果要使用单独的查询,请将条件更改为where consecutive_count = 3
(例如)。