gpt4 book ai didi

MySQL,选择至少X个字符匹配的记录

转载 作者:可可西里 更新时间:2023-11-01 08:01:44 26 4
gpt4 key购买 nike

我正在努力完成以下任务。假设我们有一个包含这些字段(ID、内容)的表

1 |苹果

2 |菠萝

3 |应用

4 |国家

现在,我正在寻找一个函数来告诉我所有可能的常见匹配项。例如,如果参数为“3”,则该函数将返回出现在不止一条记录中的 3 个字符的所有可能字符串。

在这种情况下,我得到“app”,“ppl”,“ple”,“ati”,“tio”,“ion”

如果参数是“4”,我得到:“appl”,“pple”,“atio”,“tion”

如果参数是“5”,我得到:“apple”,“ation”

如果参数为“6”,则返回 nohting。

到现在为止,我还没有找到一个函数来完成这个。

谢谢!

一些额外的信息:我在带有 MySQL 数据库的 PHP 脚本中使用它。我真的只想提供字符数量作为参数,当然还有要搜索的表。

最佳答案

好吧,这有点丑陋,但确实可以正常工作。它是通用 SQL,可以在任何环境中工作。只需生成大于您正在阅读的字段的最大长度的子字符串的多个选择。将函数中的数字 50 更改为超过您的字段长度的数字。它可能会返回一个非常长的查询,但正如我所说,它会正常工作。这是 Python 中的示例:

import sqlite3

c = sqlite3.connect('test.db')

c.execute('create table myTable (id integer, content varchar[50])')
for id, content in ((1,'apple'),(2,'pineapple'),(3,'application'),(4,'nation')):
c.execute('insert into myTable values (?,?)', [id,content])

c.commit();

def GenerateSQL(substrSize):
subqueries = ["select substr(content,%i,%i) AS substr, count(*) AS myCount from myTable where length(substr(content,%i,%i))=%i group by substr(content,%i,%i) " % (i,substrSize,i,substrSize,substrSize,i,substrSize) for i in range(50)]
sql = 'select substr FROM \n\t(' + '\n\tunion all '.join(subqueries) + ') \nGROUP BY substr HAVING sum(myCount) > 1'
return sql

print GenerateSQL(3)

print c.execute(GenerateSQL(3)).fetchall()

生成的查询如下所示:

select substr FROM 
(select substr(content,0,3) AS substr, count(*) AS myCount from myTable where length(substr(content,0,3))=3 group by substr(content,0,3)
union all select substr(content,1,3) AS substr, count(*) AS myCount from myTable where length(substr(content,1,3))=3 group by substr(content,1,3)
union all select substr(content,2,3) AS substr, count(*) AS myCount from myTable where length(substr(content,2,3))=3 group by substr(content,2,3)
union all select substr(content,3,3) AS substr, count(*) AS myCount from myTable where length(substr(content,3,3))=3 group by substr(content,3,3)
union all select substr(content,4,3) AS substr, count(*) AS myCount from myTable where length(substr(content,4,3))=3 group by substr(content,4,3)
... )
GROUP BY substr HAVING sum(myCount) > 1

它产生的结果是:

[(u'app',), (u'ati',), (u'ion',), (u'nat',), (u'pin',), (u'ple',), (u'ppl',), (u'tio',)]

关于MySQL,选择至少X个字符匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149911/

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