这是我的SQL查询:
SELECT filename
FROM video
WHERE MATCH (title, description) AGAINST
('sports' IN BOOLEAN MODE);
我在title
和description
字段中搜索单词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个查询,并将它们用作一个查询。所以我可以搜索任何不区分大小写的单词,并计算每个字段的出现次数。
答案 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)。