Выделение поискового запроса в запросе?

#php #sql #highlighting

#php #sql #выделение

Вопрос:

У меня возникли проблемы с выделением поискового запроса в запросе. Если пользователь ищет «Иисус», все стихи, содержащие «Иисус», будут перечислены и разбиты на страницы. Я хочу выделить поисковый запрос во всех этих отрывках.

Допустим, я ищу «Иисус», и появляется около 10 стихов, я хочу, чтобы все экземпляры Иисуса на каждой странице были выделены.

Мой PHP-код:

индекс:http://pastebin.com/vTdy79er
база данных Библии:http://www.mediafire.com/?00x4fnbn1vr4nch

Я понятия не имею, как это сделать.

мой оператор выбора для моих запросов:

 $searchResult = $dbLink->prepare("SELECT   bsect, bname, bnum, cnum, vnum, vtext,                                             MATCH    (bname, vtext)
AGAINST  ('$searchQuery' IN BOOLEAN MODE)
AS       relevance
FROM     kjv
WHERE    MATCH (bname, vtext)
AGAINST  ('$searchQuery' IN BOOLEAN MODE)
ORDER BY relevance
DESC
$limit"); 
  

Код, который фактически отображает мои результаты (название Библии, номер главы: номер стиха, а затем текст стиха:

 while ($searchResult->fetch())
{
print ("<span class="results title">$bname $cnum:$vnum</span>");
print ("<p class="passage">$vtext</p>");
}
  

Комментарии:

1. Сократите свой пример кода до СООТВЕТСТВУЮЩЕГО подмножества. Мы не собираемся читать эту стену кода, чтобы рассказать вам, как это сделать. Покажите, что вы пытались до сих пор, и мы можем помочь это исправить.

2. Это просто набор инструкций select и цикл, ничего действительно важного. Он берет несколько полей из базы данных и отображает их.

Ответ №1:

Я полагаю, вы уже делаете это здесь:

 $output = str_replace($_GET[phrase],"<font color=red>" . $_GET[phrase] . "</font>",$output);
  

даже если я бы предложил изменить код следующим образом:

 $output = str_replace($_GET['phrase'],'<font color="red">'.$_GET['phrase'].'</font>',$output);
  

или еще лучше, используйте <span> тег и класс, а затем назначьте весь CSS, который вы хотите, этому классу и упростите его изменение в будущем

РЕДАКТИРОВАТЬ / ДОБАВЛЯТЬ

с вашим последним обновленным сообщением это то, что вам нужно сделать (если я правильно понимаю ваш код)

 print ("<p class="passage">$vtext</p>");
  

измените его на (предполагая, что $searchQuery это переменная, содержащая строку, по которой выполняется поиск

 echo '<p class="passage">'.(str_replace($searchQuery, '<font color="red">'.$searchQuery.'</font>', $vtext).'</p>';
  

Мне также больше нравится echo, чем print, но это личное предпочтение. Наверняка вы хотите избежать " и использовать ' , когда это возможно, поскольку это ускорит PHP, поскольку движку не придется анализировать всю строку для поиска переменных.. но опять же, личные предпочтения

Комментарии:

1. На самом деле я просто скопировал вставил это с другого сайта, понятия не имел, что я делаю, лол.

Ответ №2:

Попробуйте это.

Плагин jQuery SearchHighlight. Демонстрация и реализация предоставляются.

Комментарии:

1. Это выглядит великолепно, скоро мы попробуем.

Ответ №3:

Я не смотрел ваш код, но что-то вроде этого должно сработать:

 echo str_replace($searchWord, '<span class="highlight">' . $searchWord . '</span>', $row['verse']);