Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wyszukiwanie w bazie
Forum PHP.pl > Forum > Przedszkole
Yozen
Witam,
Mam problem z wyszukiwarką. Na początku była z LIKE jednak szybko przekonałem się o bezużyteczności tej metody, więc zainteresowałem się MATCH i AGAINST.
Wyszukiwarka działa jednak nie tak jak powinna.

Mając np tabele:
Kod
id | tytul
-------------------------
1 | Simpsons - 01
2 | Simpsons - 02
3 | Simpsons - Special 1
4 | Futurama - 01
5 | Futurama - Special
6 | Simpsons - Special 2


Wykonuje zapytanie:
  1. <?php
  2. ...
  3. $zap = "SELECT * FROM napisy WHERE MATCH (tytul) AGAINST ('+$search' IN BOOLEAN MODE) ORDER BY tytul ASC";
  4. ...
  5. ?>


Po przekazaniu zmiennej $search o wartości simpsons special wynikiem wyszukiwania są wszystkie rekordy które zawierają w sobie wyraz simpsons lub special. (w tym wypadku cała tabela bez rokordu o id równym 4)

Jak mam stworzyć zapytanie dzięki któremu zostanią wyświetlone tylko i wyłącznie pozycje które zawierają w sobie wyrazy simpsons i special?


EDIT:
W sumie zastosowałem preg_replace i działa, ale dla całych wyrazów... (spacje na spacje z plusem. Dzieki czemu 2 wyraz otrzymuje +).

Jednak teraz powstał inny problem. Jak zadać zapytanie do bazy, aby z wyszukiwania np: pson Spec wyszukało Simpsons - Special 1 i 2?
Kowalikus
Gwizdka (*) zastępuje jakikolwiek znak.

dla tego przykładu pson Spec spróbuj '+*pson*+*Spec*'
Yozen
Niestety nie działa. Nawet wyszukanie samego pson nic nie wyświetla pomimo *.
Trochę dziwne... Jeżeli szukana fraza nie zaczyna się od pierwszych liter któregoś z wyrazów tytułu to nic nie wyszukuje.
np: *Si* działa a *pson* już nie.
Dodam że mam włączone FULLTEXT dla kolumny tytul.

EDIT:
Problem rozwiązany. Jednak LIKE nie jest taki kiepski jak myślałem biggrin.gif
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.