Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyszukiwanie osobno słów
Forum PHP.pl > Forum > Przedszkole
tenloginjestzajety
Witam
robię wyszukiwanie, które działa prawidłowo ale wyszukuje całą frazę, do rozbicia frazy używam explode - również działa jednak do zapytania sql i tak trafiają dwa słowa jako jedna fraza czyli stoję w miejscu. Dzięki

  1. $search = $_GET['szukaj'];
  2. $text = explode(' ', $search);
  3. $i=0;
  4. foreach($text as $t){
  5. $text[$i] = $t;
  6. $i++;
  7. }
  8. $szukaj2 = implode(' ',$text);
  9. $query = mysql_query("SELECT * FROM `tabela` WHERE `tresc` LIKE '%$szukaj2%' ");
nospor
No bo łączysz to co rozbiles
$szukaj2 = implode(' ',$text);
to nie ma co sie dziwic...

Jak dla kazdego slowa chcesz dac oddzielne LIKE, to masz zrobic tyle LIKE ile masz slow. Petla FOREACH i do dziela smile.gif
CuteOne
  1. $search = $_GET['szukaj'];
  2. $text = explode(' ', $search);
  3. $i='';
  4. foreach($text as $t){
  5. $i .= "`tresc` LIKE '%".$t."%' OR "
  6. }
  7. $i = substr($i, 0, strlen($i) - 4); // zrób echo na $i i sprawdź czy wszystko ucieło
  8.  
  9. $query = mysql_query("SELECT * FROM `tabela` WHERE $i ");
tenloginjestzajety
dzięki ale echo wypisuje OR. Jak zmienię na:
  1. $search = $_GET['szukaj'];
  2. $text = explode(' ', $search);
  3. $i='';
  4. foreach($text as $t){
  5. $i = "`tresc` LIKE $t";
  6. }
  7. $i = substr($i, strlen($i) - 4); // zrób echo na $i i sprawdź czy wszystko ucieło
  8.  
  9. echo $i;


to pokazuje ostatnie 4 znaki frazy
adrianpl20
w foreach dałeś $i = a ma być $i .=
tenloginjestzajety
niestety problem wciąż aktualny jakby ktoś znał rozwiązanie to byłbym wdzięczny.
untorched
http://ideone.com/WtI3id. Coś takiego?
tenloginjestzajety
Coś w tym stylu ale nie potrafię tego zintegrować. Mam kolumnę, która zawiera rekordy z treścią;
- Okulary słoneczne tanie
- Buty sznurowane
- jeansowe spodnie męskie


I teraz jak wpiszę w input szukaj "tanie okulary" to jest brak wyników i nie wiem jak to zrobić. Muszę podąć dokładną frazę żeby zobaczyć wyniki.

Próbuje rozbić zmienną $szukaj ale mam problemy z pętlą :/

  1. $query = mysql_query("SELECT * FROM `item` WHERE `tag` LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' OR content LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' OR size LIKE '%$szukaj%' OR material LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' OR gender LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' ORDER BY `$sort` DESC LIMIT $limit,9");
phpion
1. Ignorujesz to, co Ci koledzy piszą - uparcie stosujesz content LIKE '%$szukaj%'. Gdzie to rozbicie na pojedyncze słowa?
2. Uważaj na stosowanie OR'ów w zapytaniach - kłaniają się zasady logiki. Przykładowo 1 AND 2 OR 3 to coś innego niż 1 AND (2 OR 3). W uproszczeniu: elementy połączone OR'em pakuj w nawiasy.
tenloginjestzajety
  1. $rozbicie2 = explode(' ', $szukaj);
  2. $rozbicie = $rozbicie2;
  3. $i=0;
  4. foreach($rozbicie as $t){
  5. $rozbicie[$i] = 'LIKE'.' '.''%'.$t.'%'';
  6. $i++;
  7. }
  8. echo implode(' ',$rozbicie);
  9.  
  10. if(!empty($max) && !empty($min) && !empty($sort))
  11. {
  12. $limit = ($page-1)*9;
  13. $query = mysql_query("SELECT * FROM `item` WHERE `tag` $rozbicie AND price <= '$max' AND price >= '$min' OR content $rozbicie AND price <= '$max' AND price >= '$min' OR size LIKE $rozbicie OR material LIKE $rozbicie AND price <= '$max' AND price >= '$min' OR gender LIKE $rozbicie' AND price <= '$max' AND price >= '$min' ORDER BY `$sort` DESC LIMIT $limit,9");


Rozbija i wysyła zapytanie do SQL jednak napotkałem na kolejny problem: OR. Nie wiem jak zrobić żeby pojawiał się w zmiennej $rozbicie ale dopiero od drugiego słowa.
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.