簡體   English   中英

MySQL存儲過程:搜索可變數量的字符串

[英]MySQL Stored procedure: search for a variable number of strings

我需要一個調用的存儲過程:

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%')

我有一些疑問和疑問:

  1. 我無法將數組傳遞給過程,所以我唯一的選擇是直接傳遞字符串,如示例('foo bar')中所示?

  2. 所以我假設我必須在SP代碼中進行拆分。 我不知道怎么做,所以我搜索並找到了這個解決方案 是使用臨時表和我認為很多笨拙的代碼。 真的很復雜嗎? 表現怎么樣?

  3. 我不知道如何創建這樣的動態查詢。 我想我必須遍歷標記為每個人創建一個WHERE子句的新塊,但我不知道如何做到這一點,或者它是否是最好的解決方案。 也許連接字符串然后做一個准備好的聲明更好?

謝謝。

注意:我使用iBATIS(Java)來調用此例程。

你想要的是使用全文搜索(FTS) - MySQL的本機FTS功能只能用於MyISAM表,以及像Sphinx這樣的第三方FTS可供選擇。 這是一個在線幻燈片,是一個體面的介紹和如何

使用MySQL本機FTS,您的查詢將類似於:

SELECT *
  FROM A AS a
  JOIN B AS b ON b.id = a.b_id
 WHERE MATCH (a.f1, a.f2, b.f3) AGAINST ('foo bar');

動態SQL仍然是一個選項,具體取決於您想要/需要進行查詢的強度。 在考慮動態SQL之前,我會研究FTS產品......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM