Вопросы мужчине search php view. Как сделать алгоритм поиска по нескольким словам на PHP из БД

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

Давайте предположим, что на нашем сайте имеется множество различных материалов (статей, новостей, заметок и прочего). Всё это добро находится в базе данных. И наша задача - реализовать поиск на сайте . Простейший алгоритм следующий:

  • Создать HTML-форму со строкой поиска, а также кнопкой "Submit ". В текстовое поле пользователи будут вводить поисковый запрос, а далее нажимать на кнопку.
  • Получить поисковый запрос (как правило, передаваемый методом GET , но иногда применяют и POST ), а также, в целях защиты от XSS , пропустить его через функцию htmlspecialchars() .
  • Сделать выборку из соответствующих таблицы (со статьями, новостями, заметками и прочим) тех записей, в которых содержится поисковый запрос. Показываю примерный SQL-запрос для таких случаев: SELECT * FROM articles WHERE `text_article` LIKE %search% Соответственно, вместо search подставляется строка поиска.
  • Получив записи, в нужном виде выводим их, желательно, по релевантности. Я, например, сделал у себя на сайте так: где больше всего совпадений - та статья и релевантнее, следовательно, ставлю её первой. Скорее всего, Вам этот способ оценки релевантности тоже подойдёт.
  • Многие из Вас скажут, что ничего сложного здесь нет. И будут отчасти правы, однако, давайте разберём такой пример строки поиска: "ищу этот текст ". Встаёт вопрос: "А что, собственно, ищется? ". То ли ищется точное вхождение текста "ищу этот текст ". Или, быть может, ищется текст, где присутствуют все три слова, но которые могут следовать далеко не друг за другом. Или, возможно, ищется текст, где присутствует хотя бы одно из этих слов.

    И вот здесь задача значительно усложняется. Можно сделать сложную систему синтаксиса (как в поисковых системах), например, ищется точное вхождение, если запрос задан в кавычках. А можно давать выбор пользователям, как именно они хотят проводить поиск (с помощью radio-кнопок). Таким образом, сделано у меня на сайте. Поэтому в предыдущий алгоритм добавляется ещё один пункт: составление SQL-запрос . Вот пример SQL-запроса, когда нужно вытащить все материалы, в которых имеется хотя бы одно слово из запроса "ищу этот текст ":

    SELECT * FROM articles WHERE (`text_article` LIKE "%ищу%" OR `text_article` LIKE "%этот%" OR `text_article` LIKE "%текст%")

    Соответственно, в скрипте поиска Вы должны генерировать подобные SQL-запросы , посылать к базе данных, получать ответ и выводить его. Это всё ещё больше усложняется, если Вы выводите записи по релевантности, так как трудно сразу сказать, что должно быть релевантнее: 3 точных вхождения запроса, либо 10 вхождений частей запроса. У меня на сайте предпочтение всегда отдаётся точным вхожденияи, но этот момент уже достаточно спорен. Безусловно, это сложно, и если это Вы делаете в первый раз, то несколько часов Вы точно потратите. Надеюсь, что мой алгоритм реализации поиска на сайте через PHP Вам поможет.

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

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

    Я создам 2 файла: search.php, который будет содержать HTML и JavaScript. Второй файл, do_search.php будет содержать PHP код. Приступим к созданию первого файла:

    PHP, jQuery search demo $(function() { $(".search_button").click(function() { // получаем то, что написал пользователь var searchString = $("#search_box").val(); // формируем строку запроса var data = "search="+ searchString; // если searchString не пустая if(searchString) { // делаем ajax запрос $.ajax({ type: "POST", url: "do_search.php", data: data, beforeSend: function(html) { // запустится до вызова запроса $("#results").html(""); $("#searchresults").show(); $(".word").html(searchString); }, success: function(html){ // запустится после получения результатов $("#results").show(); $("#results").append(html); } }); } return false; }); }); Попробуйте ввести слово ajax
    Результаты для

    В этом файле мы создали обычную HTML форму, которая посылает POST запрос в бэк энд - файлу do_search.php.

    PHP код содержит комментарии, по которым вы с лёгкостью сможете понять работу скрипта. Если в базе данных нашлись совпадения, вы показываете их вашему пользователю, выделяя жирным те слова, которые искал пользователь.

    Придадим всему этому немного CSS:

    Body{ font-family:Arial, Helvetica, sans-serif; } *{ margin:0;padding:0; } #container { margin: 0 auto; width: 600px; } a { color:#DF3D82; text-decoration:none } a:hover { color:#DF3D82; text-decoration:underline; } ul.update { list-style:none;font-size:1.1em; margin-top:10px } ul.update li{ height:30px; border-bottom:#dedede solid 1px; text-align:left;} ul.update li:first-child{ border-top:#dedede solid 1px; height:30px; text-align:left; } #flash { margin-top:20px; text-align:left; } #searchresults { text-align:left; margin-top:20px; display:none; font-family:Arial, Helvetica, sans-serif; font-size:16px; color:#000; } .word { font-weight:bold; color:#000000; } #search_box { padding:4px; border:solid 1px #666666; width:300px; height:30px; font-size:18px;-moz-border-radius: 6px;-webkit-border-radius: 6px; } .search_button { border:#000000 solid 1px; padding: 6px; color:#000; font-weight:bold; font-size:16px;-moz-border-radius: 6px;-webkit-border-radius: 6px; } .found { font-weight: bold; font-style: italic; color: #ff0000; } h2 { margin-right: 70px; }

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

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

    Имеется таблица «news» , которая содержит следующие поля: id , title и content :

    Требуется осуществить поиск по полю content в нашей базе данных, которая состоит из следующих столбцов, пример смотрите на картинке выше. Приступим к реализации. Для начала создадим страницу для тестирования работы. Она будет содержать форму с полем ввода ключевых слов и кнопку «найти»:

    Листинг html кода:

    Поиск в базе данных

    В атрибутах формы прописываем путь к обработчику, содержащему алгоритм, и метод передачи post.

    Для передачи массива отобранных элементов мы используем сессию.

    Для этого мы запускаем ее в самом начале страницы.

    Для вывода будем использовать функцию print_r() .

    Для того чтобы после перезагрузки страницы результат не отобразился второй раз, с помощью unset мы убиваем сессию.

    Создадим обработчик search.php . Для начала запускаем сессию и подключаемся к базе данных:

    Подробнее о подключении к базе данных через PDO смотрите в .

    Работа алгоритма представлена на схеме:

    Разберем выборку по первому слову, в качестве примера будем использовать поисковый запрос «как сделать сайт»:

    Сначала в переменую $str получаем строку из формы методом POST . Разбиваем эту строку на слова через пробел с помощью функции expode и подсчитываем количество слов. Осуществляем запрос, в котором проверяем наличие первого слова в столбце content . Создаем пустой массив и записываем в него значения, полученные в результате выборки по запросу. Записываем в $id_count количество полученных элементов.

    Эта часть алгоритма работает по принципу «отсеивания». Допустим в базе данных имеется десять статей. После выборки по первому слову мы получаем id статей в которых есть слово «как», таких статей оказалось шесть. Далее мы производим поиск второго слова среди этих шести статей, тем самым сузив круг поиска. В результате этой итерации остается четыре статьи, которые включают в себя оба слова «как» и «сделать». На последней итерации среди оставшихся четырех статей мы ищем слово «сайт». После этого прохода получаем id одной единственной статьи, которая включает в себя все ключевые слова.

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

    Если в результате выполнения запроса в цикле мы получаем id (переменная temp ), равное одному из id предыдущей выборки (id_mass ), то этот id мы оставляем неизменным. В противном случаем мы присваиваем элементу id_mass[ j ] значение -1, тем самым исключив его из обработки.

    После окончания работы циклов мы получаем массив из id , в которых найдены ключевые слова и -1. Чтобы передать пользователю только требуемые id , мы используем цикл, в котором идет проверка, в результате которой отбрасываются все элементы равные -1. Остальные же элементы мы передаем в массив сессии:

    Функция header служит для перенаправления клиента на страницу поиска.

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

    Updated on April 30, 2016

    I"m going to show you how to create simple search using PHP and MySQL. You"ll learn:

    • How to use GET and POST method s
    • Connect to database
    • Communicate with database
    • Find matching database entries with given word or phrase
    • Display results
    Preparation

    You should have Apache, MySQL and PHP installed and running of course (you can use for different platforms or WAMP for windows, MAMP for mac) or a web server/hosting that supports PHP and MySQL databases.

    Let"s create database, table and fill it with some entries we can use for search:

    • Go to phpMyAdmin, if you have server on your computer you can access it at http://localhost/phpmyadmin/
    • Create database, I called mine tutorial_search
    • Create table I used 3 fields, I called mine articles.
    • Configuration for 1st field. Name: id, type: INT, check AUTO_INCREMENT, index: primary

    INT means it"s integer
    AUTO_INCREMENT means that new entries will have other(higher) number than previous
    Index: primary means that it"s unique key used to identify row

    • 2nd field: Name: title, type: VARCHAR, length: 225

    VARCHAR means it string of text, maximum 225 characters(it is required to specify maximum length), use it for titles, names, addresses
    length means it can"t be longer than 225 characters(you can set it to lower number if you want)

    • 3rd field: Name: text, type: TEXT

    TEXT means it"s long string, it"s not necessary to specify length, use it for long text.

    • Fill the table with some random articles(you can find them on news websites, for example: CNN, BBC, etc.). Click insert on the top menu and copy text to a specific fields. Leave "id" field empty. Insert at least three.

    It should look something like this:

    • Create a folder in your server directory and two files: index.php and search.php (actually we can do all this just with one file, but let"s use two, it will be easier)
    • Fill them with default html markup, doctype, head, etc.

    Search

    • Create a form with search field and submit button in index.php, you can use GET or POST method, set action to search.php. I used "query" as name for text field

    GET - means your information will be stored in url (http://localhost/tutorial_search/search.php?query=yourQuery )
    POST - means your information won"t be displayed it is used for passwords, private information, much more secure than GET

    Ok, let"s get started with php.

    • Open search.php
    • Start php ()
    • Connect to a database(read comments in following code)

    Интернет