MySQL считает подходящие слова - PullRequest
2 голосов
/ 27 ноября 2008

Как запросить, чтобы получить количество подходящих слов в поле, особенно в MySQL. мне просто нужно узнать, сколько раз в поле значения появляются «условия поиска».

например, значение «один два один на двоих», поэтому, когда я ищу слово «один», оно должно дать мне 3

это возможно? потому что в настоящее время я просто извлекаю значение из базы данных и выполняю подсчет на языке сервера.

Спасибо

Ответы [ 4 ]

3 голосов
/ 27 ноября 2008

Вы ищете запрос, который, учитывая список слов, возвращает количество подходящих слов в поле базы данных?

например:

Таблица базы данных имеет

ID    Terms
1     cat, dog, bird, horse

затем проверка слова «кот, лошадь» возвращает 2?

Если это так, я предлагаю вам проверить вне SQL, на любом языке, на котором вы выполняете остальную часть обработки. SQL не предназначен для этого уровня обработки.

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

Конечно, если я неправильно истолковываю ваш запрос, я могу ошибаться =)

1 голос
/ 27 ноября 2008

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

Вот функция, которую я нашел на сайте MySQL :

delimiter ||
DROP FUNCTION IF EXISTS substrCount||
CREATE FUNCTION substrCount(s VARCHAR(255), ss VARCHAR(255)) RETURNS TINYINT(3) UNSIGNED LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE count TINYINT(3) UNSIGNED;
DECLARE offset TINYINT(3) UNSIGNED;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = NULL;

SET count = 0;
SET offset = 1;

REPEAT
IF NOT ISNULL(s) AND offset > 0 THEN
SET offset = LOCATE(ss, s, offset);
IF offset > 0 THEN
SET count = count + 1;
SET offset = offset + 1;
END IF;
END IF;
UNTIL ISNULL(s) OR offset = 0 END REPEAT;

RETURN count;
END;

||

delimiter ;

Вы должны использовать это так:

SELECT substrCount('one two one onetwo', 'one') `count`; // Returns 3
0 голосов
/ 27 ноября 2008

Если вам нужно искать только один термин за раз, функция, которая делает что-то вроде

select (len(field)-len(replace,find,''))/len(find)

будет работать на сервере sql, но я не уверен насчет MySQL. Вам также нужно позаботиться о специальном случае len(find) = 0.

0 голосов
/ 27 ноября 2008

Я предлагаю вам сделать это вне SQL, независимо от механизма, Регулярные выражения больше подходят для этого, чем язык SQL. Возможно, вы могли бы сделать это с помощью представления или чего-то еще, но, как я сказал, есть более подходящие способы сделать это, например, класс / объект / функция для работы со строками из вашего языка или регулярные выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...