2014-05-21 67 views
0

我有一个SQLite3文件,其中包含学生全名“,这意味着它将超过1字至少4”和学生标记“grad”。Sqlite3自动完成查询?

在UI我有UITextField工作作为“search bar”和UITableView当用户开始更改值的文本框在异步任务我根据学生的全名从数据库中执行誉查询和更新表时的数据,以便每次用户更改textField的值时,该表都将达到数据。

和来到这里的问题,还有就是许多情况下,搜索/查询:

1-用户进入单word.//他找学生有这样的名称,也可能是姓。在这种情况下,查询将是:

SELECT grade,name FROM students where name LIKE 'Adam%' OR name LIKE '% Adam' Limit 20 OFFSET 20 

2-用户通过他/她的姓和名进入双word.//他找学生或他输入名字和第二名字。在这种情况下查询将是:

SELECT grade,name FROM students where name LIKE 'Ahmad Rami%' OR name LIKE 'Ahmad % Rami%' Limit 20 OFFSET 20 

3-用户不断输入文本他输入全名在这种情况下没有问题。

问题出在第一种情况,如果用户开始输入姓氏“单个单词”,第一个查询将执行但没有结果会出现,直到他为家族名称填写完整单词为止,因为在“ %亚当“,但如果我们把”%“放在它之后,这将返回错误的结果,以防用户意味着第一个nam。

EX:

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

“乔恩·亚当Maikel盎格鲁”

“吉姆的阿林Rafiel戈登”

如果用户输入“A”==结果==>亚当..... smith & jon ada ....盎格鲁//两者然后出现,因为名字的“亚当”和姓氏“Jon”以“A”开头。 但在我的情况下只是亚当出现。 如果我们通过在最后添加“%”来更改查询,并且用户输入“A”===>“Jims”将出现在结果中,我不希望它出现

回答

1

如果你想要查询知道用​​户的意图,你将很难。你能得到的最好的结果是产生一半直观的结果。因此,如果是用户输入的字符串,则可以搜索'%'或'%%',并遵守输入的字符串必须是名称字符串中至少一个单词的开头的规则。没有额外的记号,你不能将这个意图与仅仅搜索名字的愿望区分开来。

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

解决这个问题的方法是告诉你的数据库这个单词有什么意思。例如。名中间名姓。然后,您可以专门搜索名字或姓氏,而不用考虑中间名。

当然,您的用户必须告诉名称的哪些部分必须被视为第一个,中间或最后一个名字。从计算机的角度来看,'kjghlgkh'将是一个完美的名字。但我很怀疑这个“名字”确实被用作这个世界某个地方的名字。电脑只是做他们被告知要做的事,他们不明白他们做了什么。 (好吧,一些AI项目给出了惊人的结果,但是这需要一种程序和知识库,这在这里是不合理的)。

由于我想添加更多的评论,我删除了我的评论,并将其发布为答案。

+0

thx:D again:D – Omarj