2015-06-19 77 views
1

我有一個SQL查詢,看起來像:。LIKE查詢不能如預期

SELECT 「medical_interventions」, 「ID」 AS t0_r0, 「medical_interventions」 「refcode」 AS t0_r1, 「medical_interventions」 「intervention_tid」 AS t0_r2, 「medical_interventions」。 「medical_intervention_category_id」 AS t0_r3, 「medical_interventions」。 「created_at」 AS t0_r4, 「medical_interventions」。 「的updated_at」 AS t0_r5, 「翻譯」。 「ID」 AS t1_r0 ,「translations」。「lang」AS t1_r1,「translations」。「text」AS t1_r2, 「translations」。「created_at」AS t1_r3,「transla」 tions「。」updated_at「AS t1_r4 FROM」medical_interventions「LEFT OUTER JOIN」translations「ON 」translations「。」id「=」medical_interventions「。」intervention_tid「AND 」translations「。」lang「='fr'WHERE (medical_intervention_category_id = 7,文字像「%E%」)

我在那裏有標記évaluer

當我搜索脫穎而出只是é如上面的查詢文本,我得到évaluer如我所料。但是,如果我嘗試EV:。

SELECT 「medical_interventions」, 「ID」 AS t0_r0, 「medical_interventions」 「refcode」 AS t0_r1, 「medical_interventions」 「intervention_tid」 AS t0_r2, 「medical_interventions」 。「medical_intervention_category_id」AS t0_r3, 「medical_interventions」。「created_at」AS t0_r4, 「medical_interventions」。「updated_at」AS t0_r5,「translations」。「id」AS t1_r0,「translations」。「lang」AS t1_r1, 「translations」。「text」AS t1_r2, 「translations」。「created_at」AS t1_r3,「translations」。「updated_at」AS t1_r4 FROM「medical_interventions」LEFT OUTER JOIN「translations」ON 「翻譯」, 「ID」= 「medical_interventions」。 「intervention_tid」 AND 「翻譯」。 「郎」= 'FR' WHERE(medical_intervention_category_id = 7和文本LIKE '%EV%')

我完全沒有結果。

有什麼我不懂的LIKE?是否有可用於搜索的替代功能?

AR: 
    def self.find_by_search_query_and_problem_id(search_query, problem_id) 
     problem = Problem.find(problem_id) 
     category = ProblemCategory.find(problem.category_id) 
     medIntCategory = MedicalInterventionCategory.find_by_category_text(category.category.text) 

     search = search_query 
     query = "medical_intervention_category_id =" + medIntCategory.id.to_s + " AND text like ?" 
     return self.includes(:intervention).where(query, "%#{search}%").references(:intervention) 
    end 

在控制器

def search 
    @interventions = MedicalIntervention.find_by_search_query_and_problem_id(URI.unescape(params[:search_query]),params[:problem_id]) 
end 

在JS:

getInterventionsFromSearch: function(search_query, problem_id) 
{ 
    var interventions = new MedicalIntervetionsCollection(); 
    // fetch data on url AJAX 
    if(search_query != "") 
    { 
     interventions.url = "medical_interventions_search?search_query="+encodeURIComponent(search_query) + 
     "&problem_id=" + problem_id; 
     interventions.fetch(); 
    } 
    return interventions; 
} 
+0

您能告訴我您的AR查詢嗎? –

+0

@ArupRakshit請參閱編輯。 – jmasterx

+0

http://sqlfiddle.com/#!7/9fbfa/1:我不認爲問題與LIKE有關....其他事情正在進行....編碼? – gabrielhilal

回答

1

看到這個職位:How to SQL compare columns when one has accented chars?

另一個想法:

有一個簡單的解決方案,但不是很優雅。使用REPLACE功能,刪除您的口音。例:

SELECT YOUR_COLUMN FROM YOUR_TABLE WHERE replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(lower(YOUR_COLUMN), 'á','a'), 'ã','a'), 'â','a'), 'é','e'), 'ê','e'), 'í','i'), 
'ó','o') ,'õ','o') ,'ô','o'),'ú','u'), 'ç','c') LIKE 'SEARCH_KEY%' 

哪裏SEARCH_KEY的是,你要找到在列的關鍵詞。

或者:

一種可能的解決方案將是一個用戶定義的函數(UDF)。有一篇文檔here描述瞭如何在PHP中爲SQLite創建這樣一個函數。您可以編寫一個名爲DROPACCENTS()的函數()

+0

我正在使用SQLite – jmasterx

+0

對不起,我用一些想法更新了我的回覆。 – BrianAtkins