php - 在 MySQL 中从 m 个数字的字符串中搜索匹配 n 个数字

标签 php mysql sql-server regex

我的 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 (iduuid Five_numbers first_number 第二个数字第三个数字第四个数字第五个数字)

到目前为止我已经尝试过:

  1. 循环遍历每一行,并匹配 first_number 为用户提交的五个数字中任意一个的任何行。这实在是太不聪明了!

  2. 与 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/

相关文章:

php - $_POST 错误

Java:如何在特定目录中运行Java进程?

php - 返回以特定字母开头的结果

sql - 在 Microsoft SQL Server 中比较日期的最佳方法是什么?

sql-server - 如何比较两个sql查询值

php - Eloquent 查找错误的列

php - 由 Ajax 改变的大整数

php - base64 解码数组中的 2 个项目并仍然输出 json?

mysql - 如何查询mysql以按多个值进行选择和分组

java - 是否可以使用 SQL Server JDBC 驱动程序进行代理身份验证?