gpt4 book ai didi

php - 如何从MySQL数据库中选择同一列中包含超过3个所需单词的行?

转载 作者:行者123 更新时间:2023-11-29 10:53:16 25 4
gpt4 key购买 nike

我有一个大型数据库(超过 200 万行),用于存储用户的统计信息。用户拥有包含部分(例如散列 MAC 地址)的唯一 ID。唯一 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 个匹配时才选择。

最佳答案

您可能想检查性能

考虑这个查询,它使用 inStr 来检查 id 字符串中的字符串是否可用。我使用 substring_index 来提取部分。以防万一,如果您有兴趣拆分或提取部分 id 字符串来创建临时表,但对于这个答案,您可以忽略它。

理想情况下,您可以使用keyword1、keyword2和keyword3作为参数创建自己的存储过程,然后您就可以执行搜索并返回结果。

Where 条件检查是否在您的 ID 字符串中找到关键字 1、2 和 3。

select 
'ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX' as Id,
substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 1) as part1,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 2),'-', -1) as part2,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 3),'-', -1) as part3,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 4),'-', -1) as part4,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 5),'-', -1) as part5,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 6),'-', -1) as part6
from dual
WHERE

instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','BBBBBB') >= 1 -- keyword1
and instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','CCCCCC') >= 1 -- keyword2
and instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','DDDDDD') >= 1 -- keyword3
;

编辑如果上述查询有效,您可以添加您的逻辑。

select 
'ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX' as Id


from dual
WHERE
(
-- below logic gives true when 3 or more keywords are found. change this accordingly
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik1) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik2) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik3) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik4) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik5) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik6) >0)
) >=3

;

关于php - 如何从MySQL数据库中选择同一列中包含超过3个所需单词的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com