MySQL搜索中出现的次数和不区分大小写

时间:2013-05-24 16:24:06

标签: mysql

这是我的SQL查询:

SELECT filename  
FROM video   
WHERE MATCH (title, description) AGAINST  
('sports' IN BOOLEAN MODE); 

我在titledescription字段中搜索单词sports(不区分大小写)

现在我想要计算单词score出现在这些字段上的次数,但是要独立...所以我希望得到这样的结果:n_title = 2,n_description = 1。

我已经尝试过这个查询,但它有效...

SELECT filename,  
ROUND ((LENGTH(description) - LENGTH( REPLACE ( description, "sports", ""))) / LENGTH("sports")) AS count  
FROM video

但它并不区分大小写,当我输入sports时,它没有得到任何结果,因为在数据库中它被“保存”为“体育”(大写“S”)。

现在我的问题是如何“连接”这2个查询,并将它们用作一个查询。所以我可以搜索任何不区分大小写的单词,并计算每个字段的出现次数。

1 个答案:

答案 0 :(得分:1)

这就是你要找的东西(fiddle):

SELECT
    filename,  
    (
      CHAR_LENGTH(title)
      - CHAR_LENGTH( REPLACE(LOWER(title), "sports", "") )
    ) / CHAR_LENGTH("sports") AS cnt_title,
    (
      CHAR_LENGTH(description)
      - CHAR_LENGTH( REPLACE(LOWER(description), "sports", ""))
    ) / CHAR_LENGTH("sports") AS cnt_desc

FROM video
WHERE MATCH (title, description) AGAINST ('sports' IN BOOLEAN MODE); 
根据定义,

REPLACE区分大小写。诀窍是处理字符串的小写版本。此外,您应该使用CHAR_LENGTH代替LENGTH。前者计算字符数,后者计算字节数(而你使用的是UTF8)。