【发布时间】:2015-02-18 00:58:03
【问题描述】:
我的 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 , second_number , third_number , fourth_number , fifth_number)
到目前为止我所尝试的:
遍历每一行并匹配任何具有
first_number的行是用户提交的五个数字中的任何一个。这不聪明!与 MySQL 中的 RegExp 匹配,但这需要包含所有可能组合的 SQL 语句。这不是太聪明,但是如果有人有更高效的 MySQL
REGEXP,我可以使用得很好。
我本质上是在寻找 SQL 解决方案,因为我不必担心内存耗尽,SQL 执行会更快,我想将它放在一个视图中,以便我可以在其上执行一些命令。
我为这篇冗长的帖子道歉,但我想提供尽可能多的信息。
谢谢!
【问题讨论】:
-
请发布样本数据和预期结果?您如何传递用户提交的数字?也请正确标记您的问题。
-
您的根本问题是您没有正确规范化您的数据。添加具有行 ID 和数字(每个行 ID 5 行)的两列表将使查询变得相对简单。
标签: php mysql sql-server regex