Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Sqlite3自动完成查询?_Ios_Sql_Objective C_Autocomplete_Sqlite - Fatal编程技术网

Ios Sqlite3自动完成查询?

Ios Sqlite3自动完成查询?,ios,sql,objective-c,autocomplete,sqlite,Ios,Sql,Objective C,Autocomplete,Sqlite,我有一个SQLite3文件,其中包含学生全名“这意味着它将超过1个单词,至少有4个”和学生分数“grad” 在UI中,我将UITextField用作“搜索栏”和UITableView当用户开始在异步任务中更改文本字段的值时,我根据学生全名从数据库执行惠誉查询,并在数据可用时更新表格,这样每当用户更改文本字段的值时,表格将更新为数据 问题来了,搜索/查询的案例很多: 1-用户输入单个单词//他正在寻找的学生有这个名字,或者可能是姓。在这种情况下,查询将是: SELECT grade,name FR

我有一个
SQLite3
文件,其中包含学生全名“这意味着它将超过1个单词,至少有4个”和学生分数“grad”

在UI中,我将
UITextField
用作“
搜索栏
”和
UITableView
当用户开始在异步任务中更改文本字段的值时,我根据学生全名从数据库执行惠誉查询,并在数据可用时更新表格,这样每当用户更改文本字段的值时,表格将更新为数据

问题来了,搜索/查询的案例很多:

1-用户输入单个单词//他正在寻找的学生有这个名字,或者可能是姓。在这种情况下,查询将是:

SELECT grade,name FROM students where name LIKE 'Adam%' OR name LIKE '% Adam' Limit 20 OFFSET 20 
SELECT grade,name FROM students where name LIKE 'Ahmad Rami%' OR name LIKE 'Ahmad % Rami%' Limit 20 OFFSET 20
2-用户输入双字//他/她通过名字和姓氏查找学生,或者他输入名字和第二个名字。在这种情况下,查询将是:

SELECT grade,name FROM students where name LIKE 'Adam%' OR name LIKE '% Adam' Limit 20 OFFSET 20 
SELECT grade,name FROM students where name LIKE 'Ahmad Rami%' OR name LIKE 'Ahmad % Rami%' Limit 20 OFFSET 20
3-用户继续输入文本,在这种情况下输入全名没有问题

问题是,在第一种情况下,如果用户开始输入姓氏“single word”,则将执行第一个查询,但在他为姓氏编写完整的单词之前不会出现任何结果,因为“%Adam”后面没有“%”,但如果我们在它后面加“%”,则如果用户是指第一个nam,则将返回错误的结果

EX:

“亚当·乔恩·迈克·史密斯”

“Jon Adam Maikel Anglo”

“吉姆·阿林·拉菲尔·戈登”

如果用户输入“A”==结果==>Adam…..smith和jon ada。。。。盎格鲁//这两个词都出现,因为“亚当”的名和“乔恩”的姓都以“A”开头。 但就我而言,只有亚当出现了。
如果我们通过在末尾添加“%”来更改查询,并且用户输入“A”==>“Jims”将在结果中按原样出现,我不希望它出现

如果您想让查询知道用户的意图,您将很难做到。你能得到的最好结果是产生一半直观的结果。因此,如果是用户输入的字符串,则可以搜索“%”或“%”,并遵循以下规则:输入的字符串必须是名称字符串中至少一个单词的开头。如果没有额外的符号,你就无法区分这个意图和只搜索名字的愿望

从你的问题中,我推断名称字符串中的不同单词具有不同的含义。有时一个词被认为是名字的一部分(亚当在“乔恩·亚当”和“亚当·乔恩”中都有),有时则不是(阿林在“吉姆·阿林”中)。 如果不提供庞大的知识库,您将无法在程序中区分这些不同的含义

解决这个问题的方法是告诉数据库这些词的含义。例如FirstName、MiddleName、LastName。然后,您可以专门搜索名字或姓氏,而不考虑中间名

当然,您的用户必须告诉您姓名的哪些部分必须被视为名字、中间名或姓氏。从计算机的角度来看,“kjghlgkh”将是一个完美的名字。但我很怀疑这个“名字”是否真的被用作这个世界上某个地方的名字。计算机只是做他们被要求做的事情,他们不知道他们在做什么。(好的,一些人工智能项目会产生惊人的结果,但这需要一种程序和知识库,这在这里是不合理的)

因为我想添加更多的评论,所以我删除了我的评论,并将其作为答案发布