我的 MySQL 数据库中有大约 500 万行与以下系统匹配
n1-n2-n3-n4-n5(例如 8-23-43-12-3),其中每个数字对于该序列都是唯一的。另外,每个数字的范围是1到99。
我需要一种方法来检索 MySQL 数据库中五个数字中的三个匹配的所有行。例如,用户输入 4-23-65-82-3,我想返回共享输入的五个数字中的任意 3 个的所有行,因此 4-65-12-49-82 场比赛、34-23-76-3-65 场比赛等.
我的表格如下:
number_table
(id
、 uuid
、 Five_numbers
、 first_number
、 第二个数字
、第三个数字
、第四个数字
、第五个数字
)
到目前为止我已经尝试过:
循环遍历每一行,并匹配
first_number
为用户提交的五个数字中任意一个的任何行。这实在是太不聪明了!与 MySQL 中的 RegExp 匹配,但这需要包含所有可能组合的 SQL 语句。这不太聪明,但是如果有人有一个更高效的 MySQL
REGEXP
,我可以使用它,那就太好了。
我本质上是在寻找一个 SQL 解决方案,因为我不必担心内存耗尽,SQL 执行会更快,而且我想将它放在一个 View 中,以便我可以在其上执行一些命令。
对于冗长的帖子,我深表歉意,但我想提供尽可能多的信息。
谢谢!
最佳答案
假设您的用户输入为 n1、n2、n3、n4、n5,您可以编写如下 SQL:
select id, uuid, five_numbers from
(select *,
if(first_number in (n1,n2,n3,n4,n5), 1, 0) +
if(second_number in (n1,n2,n3,n4,n5), 1, 0) +
if(third_number in (n1,n2,n3,n4,n5), 1, 0) +
if(fourth_number in (n1,n2,n3,n4,n5), 1, 0) +
if(fifth_number in (n1,n2,n3,n4,n5), 1, 0) as total
from number_table) as t
where total >= 3
因此,如果这五个数字中的任何一个具有值,那么总数就会加 1。然后,您可以使用包含 3 个或更多用户输入数字的数字来过滤行
关于php - 在 MySQL 中从 m 个数字的字符串中搜索匹配 n 个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574123/