Intereting Posts
Присвоение информации о публикации WordPress массиву PHP и присвоение значения массива php массиву javascript ДЛЯ ЭТОГО ПРИЧИНА PHP – сериализация класса со статическими свойствами что препятствует подключению PHP к моей базе данных MySQL? Сохранять переменную, используя сеансы Масштабировать изображение в соответствии с максимальным размером файла PHP Предупреждение: запуск PHP: ????????: невозможно инициализировать модуль mysql_insert_id () возвращает 0 Можете ли вы задать значение поля формы в PHP? Интеграция изображения с автозаполнением jQuery Получить имя вызываемого файла из include () Автозаполнение jquery не работает с данными JSON Я хочу, чтобы загрузчик файлов AJAX, например, загружал файл Gmail с индикатором выполнения в PHP Как установить конфигурацию по умолчанию для GridView в Yii2 без фабрики виджета? Можно ли опустить случайные параметры в вызов функции? Проверить значение NULL в переменной, которая не может быть установлена

выбор совпадений в соответствии с длиной символа строк в строках

У меня есть 2 оператора SELECT, которые предполагают сделать так, чтобы количество совпадающих соответствий напрямую соответствовало значению char_length столбца «input». Так, например:

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 ; 

Так, например:

Столбец: input: пример строки "what superpower would you have for one day"

^ — это будет выбрано только в случае 8 совпадений, потому что 42/5 = 8.4.

42 – длина символа строки выше. Это должно быть выбрано только там, если есть 8 совпадений. Однако было только одно совпадение – слово «один», и все же оно было выбрано в любом случае. Я не уверен, что я сделал не так. Пожалуйста, взгляните на мой код.

Получен отмеченный дубликат. Это не дублирует. Там, где я получил ответ, от которого не получается.

MySQL не имеет встроенной функции, которая учитывает вхождения строки в столбце. Обходной путь – это формула:

 (CHAR_LENGTH(column) - CHAR_LENGTH(replace(column, @string, '')))/CHAR_LENGTH(@string) 

replace(column, @string, '')) возвращает значение столбца при @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) 

DEMO