gpt4 book ai didi

mysql - MySQL/CakePHP 中的子序列

转载 作者:行者123 更新时间:2023-11-29 08:40:08 24 4
gpt4 key购买 nike

在我的 mysql 表中,有一个字段是 4 个字母的 Myers-Briggs 个性类型。我想通过表进行搜索,并在性格类型与查询中的性格类型匹配时通过具有两个共同点进行匹配。按照我的理解,它实际上只是找到两者的最长公共(public)子序列并测试它 >= 2

示例:

'ISTJ' 将与 'INFJ' 匹配,因为公共(public)子序列的长度为 'IJ' >= 2

'ISTJ' 不会与 'INFP' 匹配,因为公共(public)子序列的长度为 'I' <= 2

有没有办法在 mysql 查询中做到这一点?我使用 CakePHP 进行查询,因此如果您知道如何使用 Cake 执行此操作也会很有帮助。

最佳答案

迈尔-布里格斯人格类型是位置性的。这意味着您可以逐个字符进行比较。

这是一种方法,您只需输入比较字符串一次:

select t.*
from (select t.*,
(case when substring(t.MyerBriggs, 1, 1) = substring(const.comp, 1, 1)
then 1 else 0
end) as MB1,
(case when substring(t.MyerBriggs, 2, 1) = substring(const.comp, 2, 1)
then 1 else 0
end) as MB2,
(case when substring(t.MyerBriggs, 3, 1) = substring(const.comp, 3, 1)
then 1 else 0
end) as MB3,
(case when substring(t.MyerBriggs, 4, 1) = substring(const.comp, 4, 1)
then 1 else 0
end) as MB4
from t cross join
(select 'INFJ' as comp) const
)
where (MB1+MB2+MB3+MB4) >= 2

您实际上可以在 MySQL 中将其简化为:

      select t.*
from t cross join
(select 'INFJ' as comp) const
where (if(substring(t.MyerBriggs, 1, 1) = substring(const.comp, 1, 1), 1, 0) +
if(substring(t.MyerBriggs, 2, 1) = substring(const.comp, 2, 1), 1, 0) +
if(substring(t.MyerBriggs, 3, 1) = substring(const.comp, 3, 1), 1, 0) +
if(substring(t.MyerBriggs, 4, 1) = substring(const.comp, 4, 1), 1, 0)
) >= 2

关于mysql - MySQL/CakePHP 中的子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056562/

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