0

这是我的 SQL 查询:

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

我正在搜索单词的titleanddescription字段sports(不区分大小写)

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

我已经尝试过这个查询,它可以工作......

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

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

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

4

1 回答 1

1

这就是你要找的(小提琴):

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)。

于 2013-05-24T23:59:56.617 回答