Изпълнение на търсене в сайта чрез PHP

Вие сте тук: Начало - PHP - PHP Основи - Прилагане на сайт за търсене с PHP

Изпълнение на търсене в сайта чрез PHP

Неведнъж съм помолен да напише статия за това как да се приложи за търсене на сайта чрез PHP. Задачата не е лесна, дори бих казал - много трудна, тъй като има огромно количество нюанси и препятствия. В тази статия, аз ще търси алгоритъм на сайта.

Да предположим, че нашият сайт разполага с разнообразие от материали (статии, новини, бележки и други неща). Всички тези неща е в базата данни. И нашата задача - да реализира търсенето на сайта. Най-простият алгоритъм е както следва:

Много от вас ще кажат, че няма нищо сложно тук. И ще има частично прав, обаче, ви позволява да продължи с един пример за търсене: ". Търси текста" Възниква въпросът: "Какво, всъщност, търси?". Независимо дали търсите точно настъпване на текст "този текст търсите." Или, може би, текстът се търси, където има три думи, но това може да последва, не е една след друга. Или, може би, текстът се търси, когато има най-малко една от тези думи.

И тук е мястото, където проблемът е много по-сложно. Можете да направите сложен синтаксис система (като търсачките), например, се търси точната влизането, ако искането е даден в кавички. И вие може да даде на потребителите при избора на начина, по който искате да проведе търсене (с помощта на радио-бутоните). Така че, имам на сайта. Следователно, в предишния пример, се добавя още една точка: състава на SQL-заявка. Ето един пример SQL-заявка, когато трябва да се оттегли от всички материали, в които има най-малко една дума от заявката "търси текст":

SELECT * FROM статии КЪДЕ ( `text_article` като" търси%% "OR` text_article` като"% тази% "или` text_article` като "% текст%")

Съответно, скрипта за търсене, трябва да генерира SQL подобни запитвания. изпрати на база данни, може да получи отговор, и ще го покаже. Това все още е по-сложна, когато се покаже записи от значение, тъй като е трудно да се каже веднага, че трябва да бъдат от значение: 3 точна събития заявка, или 10 повторения на отговор. Сайтът ми предпочитание е винаги дава точна vhozhdeniyai, но този път вече достатъчно спорен. Разбира се, че е трудно, и ако го направите, за първи път, на броя на часовете, което прекарвате точно. Надявам се, че моят алгоритъм изпълнение на търсене в сайта чрез PHP ще ви помогне.

Майкъл, когато въведете заявка на английски всичките дела, веднага след като въведете всички символи български поп грешка фатална грешка: Покана за член функция fetch_assoc а () на различен от обект в X: \ у дома \ greatsoftware.ru \ WWW \ fsearch.php на ред 21, аз се опитах да "SET NAMES cp1251" не работи, моля, кажете ми какво мога да направя.

Re кодира всички входни данни в правилния код, той може да UTF-8 вместо CP1251.

Майкъл, здравей! Имам един въпрос към вас. Например, това е текст в базата данни (по което искате да изпратите текстово съобщение). $ Текст = 'добре'; SELECT * FROM статии КЪДЕ text_article LIKE '% $ текст% "Тази заявка ще ни върнат към масив от всички статии, в които текстът включва" добре ". И как да се направи точно съвпадение на заявката. Т.е., че искането ще ни бъде нищо назад.

Премахване на мета героите %% от искането, то тя ще бъде точно съвпадение.

така че той не намери нищо. Искам да кажа, че щеше да намери думата е завършена. Така например, в базата данни има текст (този текст, който искате да ни), когато въведете "добре", не намери нищо, а ако трябва да донесе на "правото" е намерен.

След това погледнете в регулярните изрази. Опитайте с това искане, то трябва да се търси конкретна дума "дума": SELECT * FROM таблица, в която думи ПОЗИЦ "[[:<:]]word[[:>:]]

Здравейте, бърз, моля те, и как да се върне в резултатите от търсенето? Така например, потребителят е разширено търсене от 5 параметри, които са били предадени по пощата. Тогава бяха получени няколко резултата. Потребителят, например, един от тях се отвори, четете и след това исках да се върна в останалата част на разписката. Оказва се, че е необходимо да се предадат още веднъж тези 5 параметри, за да търсите или да има някаква нишка хитър трик в PHP-лесно? Благодарим Ви!

Да, това не е много удобно да се работи. Но ако се премине през GET, потребителят ще се върне към едни и същи резултати, без никакви проблеми.

Здравейте, Майкъл! Моля, кажете ми как да се приложи едно търсене в множество таблици в базата данни. Благодаря ви предварително)

Здравейте Майкъл! Моля, кажете ми как да се приложи за търсене по теми, с превключване от падащия списък. Сайтът е изграден върху двигателя на уроците си. Например, има раздел 1 и 2 Текстове раздел бележки, всички данни, съхранявани в базата данни в 2 таблици. Това се случва, че в първата и във втората таблица е една и съща песен, само един текст на другите бележки. В конвенционалната търсене, когато пишете името на песента и в показаните резултати от търсенето в първите си текстове на песни, и след това отново показва текста, а след това е в резултат на бележки. Ако в таблица, база данни с бележки, за да промените името на песента в друга, след това резултатите от търсенето е отлично. Ето защо смята, че търсите по раздел, просто не знам как. Моля, помогнете или да ми каже как.

Инсталирайте Селект, където потребителят ще избере борда да се търси. Въз основа на своя избор на проба трябва да се направи в съответната таблица.

Може ли да напишете заявка SQL, че ще бъде изведен от базата данни на базата на избора от раздела за потребителското търсене? В main.tpl направих такова нещо

Просто не знам как да се връзвам на този избор в базата данни, съжалявам начинаещ =)

Вие трябва да напишете точно една и съща заявка, както в статията, но на масата, от която пробата се избира чрез IF.

нещо, което не отиде! И ако не може да твърди код (извадка от базата данни, които сте въвели и показва резултатите на екрана)?

Михаил. Благодаря ви много за статията. Аз съм много, много внимателно го prochol.I аз бях в състояние да се опита да # 14))) Разбира се прекара 3 дни в това. От друга страна, търсенето се оказа страхотно. Благодаря ви много за такъв уникален статия.

Имам проблем има списък на директории, които са маркирани в областта на база данни, разделени със запетаи, и вие трябва да ги премахнете записите къде идва думата нотация Katale, всички директории ще бъдат предписани искане за GET, разделени със запетаи, като PHP посочи, че такъв тест и тест сайт директория разделени със запетаи са две различни думи, а след това търсенето се търси там, където е посочено от теста за дума. Ето сорс кода: търсене функция ($ думи) <$words = htmlspecialchars($words); if($words === "") return false; $query_search = ""; $array_words = explode(",",$words); foreach($array_words as $key=>$ Стойност) $ Query = "SELECT * FROM system_position КЪДЕ $ query_search"; $ Резултат = mysql_query ($ заявка); $ I = 0; докато ($ ред = mysql_fetch_array ($ резултат)) <$results[$i] = $row; $i++;> върне $ резултати;> $ резултати = търсене ($ _ GET [# "тип # ']); за ($ аз = 0; $ аз">

За това изследване, което е описано в примера е настроен на формата на база данни: MyISAM или InnoDB?