我有2个SELECT语句,它们使得所需匹配的数量直接对应于列'输入'的char_length。所以,例如:
if (char_length(input) <= 5) { matches required is 1 }
if (char_length(input) > 5 && char_length(input) <= 10) { matches required is 2 }
if (char_length(input) > 10 && char_length(input) <= 15) { matches required is 3 }
and ect...
然而,它并没有。只要存在匹配,它就会选择该行,无论字符串中的字符长度如何。这是我的代码:
SELECT @limit :=0;
SELECT input, response, (
input LIKE '% one %'
) AS matches, @limit := @limit +1
FROM allData
WHERE @limit < CEIL( CHAR_LENGTH( input ) /5 )
HAVING matches >0
AND matches = (
SELECT MAX( (
input LIKE '% one %'
) )
FROM allData )
LIMIT 30 ;
例如:
列:输入:示例行 "what superpower would you have for one day"
^ ---如果有8场比赛,这只会被选中,因为42/5 = 8.4。
42是上面字符串的字符长度。如果有8场比赛,则应该从那里选择。然而,只有一个匹配 - 单词&#34;一个&#34;,但它仍然被选中。我不确定我做错了什么。请看一下我的代码。
标记重复。它没有重复。在那里我得到了无法解决的答案。
答案 0 :(得分:0)
MySQL没有内置函数来计算列中字符串的出现次数。解决方法是公式:
(CHAR_LENGTH(column) - CHAR_LENGTH(replace(column, @string, '')))/CHAR_LENGTH(@string)
replace(column, @string, ''))
会返回列值,并删除所有@string
次出现的值。当您从整列的长度中减去该长度时,您将获得该字符串的所有重复的长度。将其除以字符串的长度会导致出现次数。所以你的查询应该是:
SELECT input, response, (CHAR_LENGTH(input) - CHAR_LENGTH(replace(input, 'one', '')))/CHAR_LENGTH('one') AS matches
FROM allData
HAVING matches >= CEIL(CHAR_LENGTH(input)/5)