Филтър при търсене

split

Registered
Как става когато имам запис "Gosho Ivanov" и в търсачката когато напиша "Ivanov Gosho" или "Ivan Gosho" да ми изкарва този запис.
 
и аз търся някво подобно обяснение. Казаха ми само че ставало с Fulltext не знам нищо повече... някой да хелп?
 
Варианта, за които се сещам е да си структурирате заявката по следния начин:
PHP:
<?php
$query="SELECT * FROM tablica WHERE";
$var=explode(" ",$_POST[search]);
$i=0; 
foreach($var as $prom){
  if($i=0){
     $query.="pole LIKE '%$prom%'";
  }else{
     $query.=" OR pole LIKE '%$prom%'";
  }
  $i++;
}
 
Аз се сещам за...

PHP:
/* By Nikolay Vasilev, ServOper Corporation */

[color=green]//Стринг с думите които искаш да търсиш[/color]
$searchFor ="ala bala";
[color=green]//$searchFor =$_GET['search']; - ако използваме подаване на променлива search в url[/color]

[color=green]//разделяме стринга на думите които търсим[/color]
$wordsToFindArray = explode(" ", $searchFor);


[color=green]//Празен масив със стринговете на съвпадащите изречения(стрингове)[/color]
$resultsMach = array();

[color=green]//$arrayToSearchIn - масив от стрингове в които трябва да търсим думите
//за всеки стринг в който искаме да търсим[/color]
foreach( $arrayToSearchIn as $checkMe )
{
    [color=green]//разделяме думите в стринга и ги правим на масив от думи
    //масив от думите на изречението в което търсим[/color]
    $wordsToCheckArray = explode(" ", $checkMe);

   [color=green]//Булева променлива за проверка дали са намерени търсените думи[/color]
   $isFound = FALSE;

   [color=green]//за всяка дума която търсим[/color]
   foreach($wordsToFindArray as $wordToFind )
   {
          [color=green]//[/color][color=red]Ако махнем този ред ще проверява само за една от думите които търсим. Иначе гледа дали изречението което проверяваме съдържа всички търсени думи[/color]
          $isFound = FALSE;

          [color=green]//За всяка дума, която ще проверяваме[/color]
          foreach( $wordsToCheckArray as $wordToCheck )
          {         
                      [color=green]//Превръща думите в думи с малки букви, за да няма значение разлики при малки и големи букви. Премахнете тези 2 реда ако искате да бъде проверката чувствителна към малки и големи букви[/color]
                      $wordToFind = strtolower( $wordToFind );
                      $wordToCheck = strtolower( $wordToCheck );

                      [color=green]//Ако думата която търсим се съдържа в думата която проверяваме[/color]
                      if(  strstr($wordToCheck, $wordToFind) != FALSE )
                      {
                             [color=green]//Казваме, че сме намерили думата[/color]
                             $isFound = TRUE;
                       }
           }
           
           [color=green]//[/color][color=red]Внимание: този if и съдържанието му са само ако използваме варианта със съдържане на всички търсени думи в стринговете[/color][color=green]
           //Ако последната търсена дума не е намерена[/color]
           if( !$isFound )
           {
                 [color=green] //Преминаваме към следващото изречение(излизаме от цикала с думите за това изречение/стринг) в което ще търсим[/color]
                  break;
           }
   }
   
   [color=green]//Ако думата/ите се съдържат в текущото разглеждано изречение[/color]
   if( $isFound )
   {
         [color=green]//Прибавяме текущото разглеждано изречение към масива с изреченията отговарящи на критериите[/color]
         array_push($resultsMach, $checkMe);
   }
}

[color=green]// Тук може да използвате $resultsMach, който е масив от изречения съдържащи търсените думи или корените на тези думи[/color]

Не съм го тествал ама горе доло нещо такова трябва да е.... проверете го за грешки, че го написах еи така на прима виста....

Ако имаме:
Иван петров
петър иванов
иванчо петърчето
петърчо иван
питър ивелинов

и търсим:
иван пет

$resultsMach трябва да е:
Иван петров
петър иванов
иванчо петърчето
петърчо иван

Ако използваме варианта при който при намиране на една от търсените думи да се счита за вярно и подадем:

Ако имаме:
неделин внев
петър дебелаков
стамат иванов
иван пешев
колио спрънджията

и търсим:
дебел иван

$resultsMach трябва да е:
петър дебелаков
стамат иванов
иван пешев

За някои от нещата има и готови функции но е добре винаги да си ги направиш сам за да го направиш максимално добре.



Ако искаш потребителите да могат да си предават резултата от търсенето като url използвай
PHP:
$searchFor =$_GET['search'];
ако ли не
PHP:
$searchFor =$_POST['search'];
съответно сменяш и метода на формата!

Ако използваш
PHP:
$searchFor =$_GET['search'];
със поле search понеже не може url да има разстояния, на form таг-а може да сложиш атрибут
HTML:
onSubmit="EditString();"
, а на search полето
HTML:
id="search"
и javascript:
[js]function EditString(){
searchText = document.getElementById('search').value;
document.getElementById('search').value = searchText.replace(/ /gi, "+");
}[/js]
и в кода да смениш
PHP:
explode(" ",
със
PHP:
explode("+",
 

Back
Горе