如何查询以获取字段中匹配单词的计数,特别是在MySQL中。 我只需要知道“搜索词”出现在字段值中的次数。
例如,值是“一两两”,所以当我搜索单词“one”时,它应该给我3个有可能吗?因为目前我只是从数据库中提取数值并使用服务器端语言进行计数。
谢谢
答案 0 :(得分:3)
您是否希望找到一个查询,给定一个单词列表,返回数据库字段中匹配单词的数量?
例如:
数据库表有
ID Terms 1 cat, dog, bird, horse
然后检查单词“cat,horse”返回2?
如果是这样,我建议您检查SQL的外部,无论您正在进行其余处理的语言是什么.SQL不是为此级别的处理而设计的。
您可能使用存储过程来循环查看您需要检查的单词,但我怀疑它是否有效或高效。
当然,如果我误解了你的要求,我可能会错的=)
答案 1 :(得分: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
答案 2 :(得分:0)
我建议您在SQL之外执行此操作,无论引擎如何,正则表达式比SQL语言更适合这种情况。您可以使用视图或其他内容执行此操作,但正如我所说,有更多正确的方法可以像您的语言或正则表达式中的字符串操作类/对象/函数一样。
答案 3 :(得分:0)
如果您只需要一次搜索一个术语,则执行类似
的功能select (len(field)-len(replace,find,''))/len(find)
可以在sql server中工作,但我不确定MySQL。您还需要处理特殊情况len(find) = 0
。