Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka
Forum PHP.pl > Forum > Bazy danych > MySQL
nexis
Witam,

moja baza danych ma następującą strukturę:

nazwa VARCHAR(65)
symbolprod VARCHAR(21)
opis_1 VARCHAR(170)

Dla tych trzech kolumn ustawiłem oczywiście FULLTEXT.

Korzystam z takiej formy wyszukiwania:

  1. <?php
  2. $query = "SELECT nazwa, symbolprod, opis_1 FROM products WHERE match(nazwa,symbolprod,opis_1) against('$string')";
  3. $query = mysql_query($query);
  4. ?>


gdzie $string to oczywiście wyszukiwana fraza (przesyłana z input metodą GET).

To zapytania co prawda działa, ale tylko w niektórych przypadkach.
Mam przykładowo rekord, którego symbolprod jest 3CRPAG175B. Chciałbym, żeby ten rekord został znaleziony, gdy wpiszę tylko część tej nazwy - np. G175B

Wiecie jak mi pomóc?
nospor
No ale to jest problem MySQL a nie php. PRzenosze

Poczytaj o like
nexis
Mówią, że obecnie używa się MATCH ... AGAINST zamiast LIKE. Co jest lepsze w moim przypadku?
nospor
Cytat
Mówią
Kto tak mowi? Czyzby ONI (obcy)? winksmiley.jpg

match sluzy do Full-Text Searches, a to co ty chcesz osiągnac to zwyklym like da sie zrobic

edit po poscie nizej:
aaa, to w takim wypadku wymiękam. takich wyszukiwarek nie pisalem sad.gif
nexis
W takim razie powiedzmy, że użytkownik wpisze jako słowo kluczowe:

to jest tekst

I zastosuję LIKE to otrzymam jedynie wyniki, gdzie ciąg to jest tekst pojawi się w całości.

A ja chcę otrzymać wyniki uporządkowane chronologicznie względem trafności, gdzie te słowa się pojawiają w nie określonej kolejności.

Co mi w tym przypadku poradzisz?
Sh4dow
W manualu jest wiekszosc napisane problemow z wyszukiwaniem przy FULLTEXT, jesli chodzi o czesc slowa to mozna uzywac w zapytaniu against znaku '*'
Jesli chodzi o trafnosc to SELECT MATCH() AGAINST() zwraca strafnosc od 0 - 1 w postaci float. Mozesz po czyms takim ustawic order. Nalezy pamiętać zeby ustalic zasady wyszukiwania przy wielu słowach i na podstawie tego wygenerowac zapytanie.
Ja osobiscie czasami tworzyłem pare zapytan a wyniki łączyłem pozniej w odpowiedni sposób. Trzeba niestety troche posiedziec i potestowac rozne zapytania.
mike
Cytat(nexis @ 14.11.2006, 10:52:28 ) *
Mówią, że obecnie używa się MATCH ... AGAINST zamiast LIKE. Co jest lepsze w moim przypadku?

Jak mówią to poczytaj co mówią.
Pewnie też mówią dlaczego tak jest tongue.gif

eX Blog :: Wyszukiwarka w MySQLu
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.