2008-11-27 107 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