Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> szukanie zaawansowane php i MySQL, używanie and or not
infor946
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 22.02.2006

Ostrzeżenie: (0%)
-----


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ł ?
Go to the top of the page
+Quote Post
styx
post
Post #2





Grupa: Zarejestrowani
Postów: 138
Pomógł: 3
Dołączył: 21.11.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował dr_bonzo 23.02.2006, 12:33:51


--------------------
"Istotne problemy naszego życia nie mogą być rozwiązane na tym samym poziomie myślenia, na jakim byliśmy kiedy je tworzyliśmy". A.Einstein
Go to the top of the page
+Quote Post
infor946
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 22.02.2006

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 16:00