4
我需要一些存儲過程調用,如:MySQL的存儲過程:搜索字符串的可變數目
search('foo bar')
使得類似搜索:
SELECT FROM A, B
WHERE A.B_ID = B.ID
AND (A.f1 LIKE '%foo%' OR A.f2 LIKE '%foo%' OR B.f3 LIKE '%foo%')
AND (A.f1 LIKE '%bar%' OR A.f2 LIKE '%bar%' OR B.f3 LIKE '%bar%')
而且我有一些疑惑和問題:
我不能將數組傳遞給過程,所以我唯一的選擇是直接傳遞字符串作爲在這個例子中('foo bar')?
所以我假設我必須做SP代碼拆分。我不知道如何,所以我搜索並找到了this solution。正在使用臨時表和我認爲很多笨拙的代碼。真的很複雜嗎?表現如何?
我不知道如何創建這樣的動態查詢。我想我必須遍歷這些標記來爲每個人創建一個WHERE子句的新塊,但我不知道如何做到這一點,或者如果這是最好的解決方案。也許連接字符串,然後做一個準備好的聲明更好?
謝謝。
注意:我使用iBATIS(Java)來調用這個例程。
謝謝。我不能做這種搜索,因爲我們使用InnoDB表(幸運的是)。我會考慮獅身人面像,但我認爲安裝一個新模塊對於客戶來說不是容忍的行爲。如果不能簡單地使用存儲過程來實現,我認爲使用Java生成查詢將是更好的選擇。我錯了? – sinuhepop 2010-07-12 08:45:13
@Sinuhe:這太糟糕了:(我真的試圖爲使用Sphinx做一個強有力的例子 - 顯示這兩種解決方案的速度有多快。我認爲在MySQL中使用動態SQL生成查詢會比從Java更好 - Java需要當MySQL存儲過程只需要參數時發送整個查詢 – 2010-07-12 17:10:22
嗯,事實是,我最終使用iBATIS生成了查詢,我認爲安裝和維護Sphinx對於這個簡單的用例並不是強制性的。看到那裏,有帶寬? – sinuhepop 2010-07-12 17:49:57