Случаи количества слова подряд в MySQL

Вы можете использовать трубу для фильтрации, она будет намного чище, просто добавьте трубу перед директивой * ngFor.

@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {
  transform(value: any, field: string, input: string) {
    if (input !== undefined && input.length >= 2) {
      input = input.toLowerCase();
      if (typeof value[0] === 'string') {
        return value.filter(function(el: any) {
          return el.toLowerCase().indexOf(input) > -1;
        });
      }
      return value.filter(function(el: any) {
        return el[field].toLowerCase().indexOf(input) > -1;
      });
    }
    return value;
  }
}

Добавьте этот канал, и в HTML, где бы вам ни понадобилось фильтровать

<div *ngFor="let val of filterJson | filter: "filterCriteria""> </div>

с точки зрения обнаружения изменений и производительности, каналы - это круто. Надеюсь, это поможет, всего наилучшего

6
задан Alnitak 28 December 2008 в 20:23
поделиться

5 ответов

Это не тот случай, когда реляционные базы данных очень хороши, если только вы не можете использовать полнотекстовую индексацию, а вы уже заявили, что не можете, поскольку используете InnoDB. Я бы предложил выбрать соответствующие строки и выполнить подсчет слов в коде приложения.

2
ответ дан 17 December 2019 в 20:36
поделиться

Я использовал технику, как описано в ссылке ниже. Использование метода length и replace функции MySQL.

Уместность ключевого слова

0
ответ дан 17 December 2019 в 20:36
поделиться

Что-то как ПОДОБНЫЙ или REGEXP не масштабируется (если это не будет крайнее левое соответствие префикса).

Рассмотрите вместо этого использование полнотекстового индекса для того, что Вы хотите сделать.

select count(*) from yourtable where match(title, body) against ('some_word');
0
ответ дан 17 December 2019 в 20:36
поделиться

Что-то вроде этого должно работать:

выберите количество (*) из таблицы где имя поля REGEXP' [[: <:]] слово [[:>:]]';

Окровавленные детали находятся в руководстве MySQL, разделяют 11.4.2.

0
ответ дан 17 December 2019 в 20:36
поделиться

Вы можете попробовать этот извращенный способ:

SELECT 
(LENGTH(field) - LENGTH(REPLACE(field, 'word', ''))) / LENGTH('word') AS `count`
ORDER BY `count` DESC
  • Этот запрос может быть очень медленным
  • Выглядит довольно некрасиво
  • REPLACE () - это случай- чувствительный
1
ответ дан 17 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: