Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szukanie tekstu z użyciem '=' oraz 'LIKE'
Forum PHP.pl > Forum > Bazy danych > MySQL
szafik
Witam.

Jaka jest różnica między '=' oraz LIKE?

Te dwa zapytania:
  1. SELECT * FROM `meble` WHERE `name` = 'szafa'


  1. SELECT * FROM `meble` WHERE `name` LIKE 'szafa'

zwrócą ten sam wyniik.

Którego lepiej używać i dlaczego?
Mchl
W takim przypadku lepsze jest =

LIKE daje Ci możliwość wyszukowania wartości będących częścią łańcucha

puść sobie dla przykładu:

Kod
SELECT * FROM `meble` WHERE `name` LIKE 'sz%'

Kod
SELECT * FROM `meble` WHERE `name` LIKE '%fa'

Kod
SELECT * FROM `meble` WHERE `name` LIKE '%af%'


% zastępuje dowolną ilość dowolnych znaków (w tym 0) coś jak * w OS
_ zastępuje dokładnie jeden znak

Kod
SELECT * FROM `meble` WHERE `name` LIKE 'szaf_'


dopasuje na przykład 'szafa','szafy','szafę'
szafik
Ok, dziękuję za rozjaśnienie sprawy, widać, że ma Pan widzę na ten temat smile.gif

Mam jeszcze pytanie związane z tym w pierwszym poście.

Na czym polega wyszukiwanie tzw. "pełno tekstowe", czym to się różni od zwykłego wyszukiwania z użyciem '=' lub 'LIKE'?
cojack
Wyszukiwanie pełnotekstowe opiera się o słownik, czyli jeżeli wpiszesz wyrażenie: "samochód" to leksykalnie słownik będzie wyszukiwał takich wyrażeń jak "samochody" czy też inne, wyszukiwanie pełnotekstowe w MySQL jest dostępne tylko na tabelach z silnikiem MyISAM.
Mchl
W uproszczeniu:

KIedy dodajesz wiersz do tabeli w któej istnieje indeks typu FULL-TEXT, MySQL łączy ze sobą wszystkie pola objęte tym indeksem, a następnie rozbija na pojedyńcze słowa (parsowanie) i dodaje je do indeksu. Struktura tego indeksu jest dwupoziomowa i wygląda mniej więcej tak.

Poziom 1. słowo, ilość wystąpień
Poziom 2. waga, id wiersza w którym słowo występuje

Kiedy korzystasz z wyszukiwania pełnotekstowego, baza danych wyszukuje poszukiwane słowa w indeksie i na tej podstawie zwraca wiersze, posortowane dodatkowo wedle trafności (która z kolei wyliczana jest na podstawie ilości wystąpień i wagi).

Standardowy parser z tego co wiem nie uwzględnia polskiej fleksji, więc 'samochód' i 'samochody' to dla niego dwa różne słowa, MySQL posiada jednak API pozwalające na podpięcie własnych parserów (np dla języka polskiego, ale też pozwalające na parsowanie np dokumentów XML z pominięciem tagów)
cojack
Nie wiem jak w mysql, ale w postgresie dorzucasz ispella i gra muzyka.
Mchl
Dla MySQL np mnoGoSearch + słownik w formacie ispell
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.