Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: szukanie zaawansowane php i MySQL
Forum PHP.pl > Forum > Przedszkole
infor946
witam mam jedną tabelke w mysqlu, która wygląda m.w tak:
ID | nr_wolumenu | autor | rok_wyd | tytul | keywordy |
12 | 121332123 | J.Kos| 2001 | Prawo karne |;prawo;karne;prawo karne; |

w komórce "keywordy" trzymam keywordy (rozdzielone średnikami) opisujące wolumeny. Pole to nie ma ograniczenia, keywordów moze być wiele (ale nie raczej nie więcej niż 40-60)
proste szukanie mam skonstruowane prosto
query = "SELECT id, nr_wolumenu, tytul FROM tabela where keywordy like '%;$strsearch;%' limit $w, 20"
gdzie zmienna $strsearch to wartość wpisana w formularzu do szukania.
kolejną rzecza jaką chciałbym zrobić to wyszukiwanie zaawansowane, tak aby można było wpisać w formularzu np. coś takiego:
"kryminał and paryż and morderstwo not kos"
lub
"(kryminał or sensacja) and morderstwo"
czyli w sql:
"select id,, from tabela where keywordy like '%;kryminał;&' and keywordy like '%;paryż;%' and keywordy like '%;morderstwo;%' and keywordy not like '%;kos;%' limit 0,20 order by ..."
itd
teraz tylko pytanie jak skonstruować funkcje w php, która będzie analizowała wartość $strsearch i w zależności od tych and or not odpowiednio konstruowała zapytanie SQL.
Macie pomysł ?
styx
Miałem też podobny problem i zrobilem to tak

  1. <?php
  2.  
  3.   $pierwszy=1;
  4.  if (isset($_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_PRODUKT']]['dob
  5.     {
  6.       if ($pierwszy==1)
  7.          $czesc[0]='ILOSC='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['I
  8.       else
  9.          $czesc[0]=',ILOSC='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['
  10.       $pierwszy=0;
  11.     }
  12.  
  13.  if (isset($_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_PRODUKT']]['god
  14.     {
  15.        if ($pierwszy==1)
  16.         $czesc[1]='CZAS='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_
  17.        else
  18.         $czesc[1]=',CZAS='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID
  19.       $pierwszy=0;
  20.       }
  21.  
  22.  if (isset($_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_PRODUKT']]['god
  23.     {
  24.       if ($pierwszy==1)
  25.        $czesc[2]='CZASZ='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_
  26.       else
  27.        $czesc[2]=',CZASZ='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID
  28.       $pierwszy=0;
  29.     }
  30.  
  31.  if (isset($_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_PRODUKT']]['zle
  32.     {
  33.       if ($pierszy==1)
  34.        $czesc[3]='BRP='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_PR
  35.       else
  36.        $czesc[3]=',BRP='.$_SESSION['zrobione'][$_SESSION['zmiana']][$maszyna][$_SESSION['wydzial']][$licznik][$wierszyk['ID_P
  37.       $pierszy=0;
  38.     }
  39.  
  40.  
  41.  $calosc =$czesc[0].$czesc[1].$czesc[2].$czesc[3];
  42.  
  43. ?>



,konstruuje jeden string w zależności od istniejących wartosci a potem je łącze, uwazgledniam tylko fakt który jest pierwszy(istotne dla postawienia odpowiedni0o przecinków) i wykonuje insert ale można to przerobi na zapytanie w podobny sposób. Jak widzisz po prostu to łącze stringi w odpowiedni sposób, sorx za poobcinane wiersze ale kopiowalem to z putty
infor946
dzięki, ale już poradziłem sobie z tym inaczej.
dzięki użyciu w sql match against in boolean mode zamiast like ..., wystarczy zamieć and na +, not na - i działa..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.