mysql如何实现双色球胆拖的查询?

例如胆号我设置了8,9,10,11这4个号码
出现个数为2
那么我过滤出来的结果应包含8,9,10,11的其中2个
数据表结构
id hong1 hong2 hong3 hong4 hong5 hong6
用mysql语句能实现这个查询吗?应该怎么写?

出现个数为2 什么意思? 不太能理解你的需求

是4列里面随机筛选2列出来吗?

我这样解释吧!

胆码组:由1到33个红球号码组成,选择一组用户认为要出现的号码,并设置要出现的个数,组合起来确定出号条件。例如设定胆码组号码为1,11,22,出现个数为2,则在过滤结果中的每注号码包含1,11,22中的其中两个。

胆号在hong1、hong2、hong3、hong4、hong5里面筛选出来?

1、问题根本没说清楚。。。

胆号存储到数据库表中的哪个字段中,只有知道数据存储的地方才能写SQL来筛选数据

2、首先要先有数据才能查询

数据哪里来的?存储到哪里?

这个个人理解应该是有个号码池,通过程序控制:获得胆号池,从胆号池中选出目标个数的胆号,然后存储到数据库

但是看你的表没有存储胆号的地方啊,只要要有字段存储。

3、先想想清楚具体的需求,设计合理的表结构,这样会给以后使用数据提供很大的便利。

1        2        3        4        5        6
1        2        3        4        5        7
1        2        3        4        6        7
1        2        3        5        6        7
1        2        4        5        6        7
1        3        4        5        6        7
2        3        4        5        6        7
1        2        3        4        5        8
1        2        3        4        6        8
1        2        3        5        6        8

数据表字段就是  hong1 hong2 hong3 hong4 hong5 hong6
胆号就是33个红球里面自定义的  例如胆号我选的3,4,7  出现的个数为2的话
那如果在上面这些数据去筛选的话
正确的结果应该是包含3,4或者3,7或者4,7的组合

简单来说就是要在上面这些数据筛选出包含3,4或者3,7或者4,7的组合

出现胆号个数如果固定是2的话,可以程序中将输入的胆号池分解为列举成所有可能的2胆号组合,然后使用sql筛选出列举的2胆号组合的单个结果集,合并到一起返回。

SELECT * FROM `tb_ssq`
where (hong1 = 3 and hong2=4) 
or (hong1 = 3 and hong3=4)
or (hong1 = 3 and hong4=4)
or (hong1 = 3 and hong5=4)
or (hong2 = 3 and hong3=4) 
or (hong2 = 3 and hong4=4) 
or (hong2 = 3 and hong5=4) 
or (hong3 = 3 and hong4=4) 
or (hong3 = 3 and hong5=4) 
or (hong4 = 3 and hong5=4) 

select * from (
	select *,r.one+r.two+r.three result --求出胆号出现次数
	from (
		SELECT
			id,
			hong1,
			hong2,
			hong3,
			hong4,
			hong5,
			hong6,
			-- 判断是否包含第一个胆号 3为动态传入数据
			CASE 
			WHEN hong1 = 3 THEN
				1
			WHEN hong2 = 3 THEN
				1
			WHEN hong3 = 3 THEN
				1
			WHEN hong4 = 3 THEN
				1
			WHEN hong5 = 3 THEN
				1
			WHEN hong6 = 3 THEN
				1
			ELSE
				0
			END one,
			
			-- 判断是否包含第二个胆号 4为动态传入数据
			CASE 
			WHEN hong1 = 4 THEN
				1
			WHEN hong2 = 4 THEN
				1
			WHEN hong3 = 4 THEN
				1
			WHEN hong4 = 4 THEN
				1
			WHEN hong5 = 4 THEN
				1
			WHEN hong6 = 4 THEN
				1
			ELSE
				0
			END two,
			
			-- 判断是否包含第三个胆号 7为动态传入数据
			CASE 
			WHEN hong1 = 7 THEN
				1
			WHEN hong2 = 7 THEN
				1
			WHEN hong3 = 7 THEN
				1
			WHEN hong4 = 7 THEN
				1
			WHEN hong5 = 7 THEN
				1
			WHEN hong6 = 7 THEN
				1
			ELSE
				0
			END three
			-- 后续可自行扩展

		FROM `tb_ssq`) r
		) rr
where rr.result >= 2 -- 胆号符合条件的个数

可根据需求自行扩展下,现在这个是3个里面筛出2个及以上的,在Mapper里面用<if>标签判断下有没有参数就好