MySQL выбрать контент вокруг ключевого слова - PullRequest
0 голосов
/ 07 июня 2011

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

Кто-нибудь знает, что будет оператор SQL для чего-то подобного?

Хорошо, чтобы уточнить, представьте себе следующий оператор SQL:

SELECT * 
FROM `articles`
WHERE `content` LIKE '%keyword%'

Теперь - этот оператор будетвернуть список результатов, которые соответствуют предложению WHERE.

Далее я обертываю все ключевые слова в набор результатов с помощью диапазона, чтобы выделить ключевое слово, используя следующий метод (PHP):

public static function highlight($string = null, $keyword = null, $class = 'highlight') {
     return str_ireplace($keyword, "<span class=\"{$class}\">{$keyword}</span>", $string);
}

Теперь это будет работать нормально, но каждый результат отображает только начальное число символов X от каждого результата.

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

Надеюсь, это имеет смысл.

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Это можно улучшить, но мне кажется, вы ищете что-то вроде этого

select *,
case
when locate('search_test',field) < 10 then substring(field,1,char_length('search_test')+10)
else substring(field from locate('search_test',field) - 10 for char_length('search_test') + 20)
end as content
from table
where field like '%search_test%'
0 голосов
/ 07 июня 2011

Хорошо - я думаю, что я понял это - вот то, что я придумал:

SELECT
IF (
    LOCATE('keyword', `content`) < 20,
    SUBSTRING(`content`, 1, 200),
    SUBSTRING(`content`, LOCATE('keyword', `content`) - 20, 200)
) AS `content`
FROM `table`
WHERE `content` LIKE '%keyword%'

Сначала определяем позицию ключевого слова, затем, если его индекс меньше 20 Iпросто получайте контент с самого начала, если он идет дальше, чем 20-й индекс, тогда я беру его индекс 20 символов и до 200 символов вместе - и это работает!

Спасибо, Ник - ваш ответ был действительно полезным.

Осталось только одно - как я могу удалить html-теги из поля содержимого, чтобы они были удалены - возможно, с помощью REGEXP - кто-нибудь знает, как?

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