2014-05-21 116 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