【发布时间】:2017-04-13 12:26:50
【问题描述】:
我有一个大型数据库(超过 200 万行),用于存储来自用户的统计信息。用户具有包含部分的唯一 ID(例如散列 MAC 地址)。 示例唯一 ID 字符串为:
“AAAAAA-BBBBBB-CCCCCC-DDDDDD-EEEEEE-FFFFFFF”
有时唯一 ID 的一部分会发生变化,例如:
“ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX”
我想使用 PHP 识别用户并选择至少 3 个(或不同值)唯一 ID 部分匹配的所有行。有什么有用的语法可以用来做这件事吗?我知道我可以选择包含至少 1 个唯一 ID 部分的所有行,然后通过“-”字符分解为一个数组并检查是否包含至少 3 个相同的单词,但我相信这不是最快的方法。
基本上,我想使用类似的东西:
WHERE `UniqueID` REGEXP 'AAAAAA|BBBBBB|CCCCCC|DDDDDD|EEEEEE|FFFFFFF';
但仅在 6 个单词中有 3 个匹配时才选择。
【问题讨论】:
-
你的唯一ID应该分成多列,这样会简单得多。还有,火柴的位置一定要匹配吗?
-
感谢您的回答!不幸的是,这些列可以包含不同顺序的“唯一 id 部分”。有时唯一 ID 可以更短(例如 4 部分而不是 6 部分)等。这些部分通常是散列的硬件信息(随机长度的数字,最长 12 个字符)。
-
'AAAAAA|BBBBBB|CCCCCC|DDDDDD|EEEEEE|FFFFFFF' 等价于like a or like b or like c or like d or like e or like f.但是无论他们的位置如何,您都想要至少三场比赛??
-
是的@krishKM,这就是我需要的。