2008-11-27 103 views
2

如何查詢得到的匹配單詞數在一個領域,特別是在MySQL。 只需要獲取「搜索字詞」在字段值中出現的次數。MySQL的計數匹配詞

例如,該值是「一二一ONETWO」所以,當我搜索單詞「一個」應該給我3

這可能嗎?因爲目前我只是將數據從數據庫中提取出來並用服務器端語言進行計數。

謝謝

+0

你能更好地描述你想要的嗎?最好用例子... – Ray 2008-11-27 03:07:34

回答

1

您可以創建一個函數直接SQL中使用,爲了做到這一切在一個步驟。

這裏是a function which I found on the MySQL website

delimiter || 
DROP FUNCTION IF EXISTS substrCount|| 
CREATE FUNCTION substrCount(s VARCHAR(255), ss VARCHAR(255)) RETURNS TINYINT(3) UNSIGNED LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA 
BEGIN 
DECLARE count TINYINT(3) UNSIGNED; 
DECLARE offset TINYINT(3) UNSIGNED; 
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = NULL; 

SET count = 0; 
SET offset = 1; 

REPEAT 
IF NOT ISNULL(s) AND offset > 0 THEN 
SET offset = LOCATE(ss, s, offset); 
IF offset > 0 THEN 
SET count = count + 1; 
SET offset = offset + 1; 
END IF; 
END IF; 
UNTIL ISNULL(s) OR offset = 0 END REPEAT; 

RETURN count; 
END; 

|| 

delimiter ; 

你應該使用這樣的:

SELECT substrCount('one two one onetwo', 'one') `count`; // Returns 3 
3

你希望找到一個查詢,給出的單詞的列表,返回數據庫字段匹配的詞的數量?

如:

數據庫表有

 
ID Terms 
1  cat, dog, bird, horse 

然後運行的 「貓,馬」 返回2字支票?

如果是這樣,我建議你在SQL之外執行以外的,不管你使用哪種語言進行其餘的處理。SQL不是爲這個級別的處理而設計的。

你可能可能使用存儲過程來循環你需要檢查的單詞,但我懷疑它是否有效或高效。

當然,如果我誤解你的要求,我可能是全錯=)

0

我建議你這樣做外SQL,無論發動機,正則表達式是更適合的是比SQL語言。你可以用視圖或其他東西來做到這一點,但正如我所說的,有更合適的方法來處理它,比如語言或正則表達式中的字符串操作類/對象/函數。

+0

是的,這是我所做的,但它加倍了循環,並且由於該表包含數百條記錄,所以花費了大量時間 – Komang 2008-11-27 04:24:08

0

如果你只需要一次搜索一個術語,它確實像

功能
select (len(field)-len(replace,find,''))/len(find) 

將在SQL Server的工作,但我不知道有關MySQL。你還需要照顧特殊情況len(find) = 0