Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Zapytanie sql zwraca błędne wyniki
--Piotrek--
post
Post #1





Goście







Witam,
Moje zapytanie wygląda tak:

  1. SELECT id,tytul,link FROM `tabela` WHERE match(tytul) against ("+'.$szukane.'*" IN BOOLEAN MODE) GROUP BY link order by match(tytul) against("+'.$szukane.'*") desc


Przy wyszukiwaniu załóżmy: 'andrzej nowakowski kiedy nadejdzie jutro', wyniki wyglądają mniej więcej tak:

1. andrzej nowakowski - andrzej nowakowski - nadzieja
2. andrzej nowakowski - zmierch
3. andrzej nowakowski
4. andrzej nowakowski - kiedy
5. andrzej nowakowski - kiedy nadejdzie jutro
6. andrzej nowakowski - zima

Pomijając fakt, że niektóre rekordy, jak widać mają błędne tytuły to jednak dlaczego to co jest idealnym dopasowaniem dla szukanej frazy, zamiast
na początku jest dopiero na 5 miejscu ?

Problem ten występuje tylko dla pewnych zapytań, ale jednak coś jest nie tak.
Jak to naprawić ?
Z góry dzięki za pomoc!
Go to the top of the page
+Quote Post
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


W order by wykorzystujesz match, który nie jest w boolean mode, jak najbardziej słusznie, ale ze składnią skopiowaną z boolean mode, co powoduje traktowanie dodatkowych znaków jako zawartości do wyszukania, dzięki temu nie jest to już idealne dopasowanie. Usunięcie ich rozwiąże problem kolejności. Natomiast dodatkowe błędne wyniki spowodowane są tym, że "+'.$szukane.'*" oznacza w tym przypadku "+'.andrzej nowakowski kiedy nadejdzie jutro.'*". Powinno być "+".$szukane."*".

Ten post edytował pmir13 17.04.2011, 18:48:56
Go to the top of the page
+Quote Post
--Piotrek--
post
Post #3





Goście







W takim razie jak zmodyfikować order by, żeby działało tak jak trzeba, bo szczerze mówiąc próbowałem już wielu kombinacji, ale ciągle
nie mogę uzyskać zadowalającego efektu ?
Go to the top of the page
+Quote Post
pmir13
post
Post #4





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


  1. $query = "SELECT id,tytul,link FROM tabela WHERE match(tytul) against ('+$szukane*' IN BOOLEAN MODE) GROUP BY link order by match(tytul) against ('$szukane') desc";

W ten sposób masz poprawną kolejność, przy założeniu dokładnego przypasowania pierwszego słowa z frazy.
Jeśli jednak chcesz wyłącznie idealną zgodność
  1. $query = "SELECT id,tytul,link FROM tabela WHERE match(tytul) against ('\"$szukane\"' IN BOOLEAN MODE) GROUP BY link order by match(tytul) against ('$szukane') desc";

Go to the top of the page
+Quote Post
--Piotrek--
post
Post #5





Goście







Nie za bardzo mi to działa.
Pierwszy sposób czyli:
  1. $sql = 'SELECT id,tytul,link FROM `tabela` WHERE match(tytul) against ("+'.$szukane.'*" IN BOOLEAN MODE) GROUP BY link order by match(tytul) against("'.$szukane.'") desc';

Działa identycznie z tym co podałem na początku.

Natomiast drugi sposób:
  1. $sql = 'SELECT id,tytul,link FROM `tabela` WHERE match(tytul) against ('\"$szukane\"' IN BOOLEAN MODE) GROUP BY link order by match(tytul) against("'.$szukane.'") desc';

wywala mi błędy:
  1. Warning: Unexpected character in input: '\' (ASCII=92) state=1 on line 128
  2. Parse error: syntax error, unexpected '"' on line 128
Go to the top of the page
+Quote Post
pmir13
post
Post #6





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


Nie dziwne, że nie działa lub wywala błędy skoro źle przepisujesz. Proponuję kopiuj/wklej.
Oczywiście $query na $sql możesz zamienić, ale resztę zostaw dokładnie.

Pierwsze zapytanie dla zestawu:

andrzej nowakowski - andrzej nowakowski - nadzieja
andrzej nowakowski - zmierch
andrzej nowakowski
andrzej nowakowski - kiedy
andrzej nowakowski - kiedy nadejdzie jutro
andrzej nowakowski - zima

i szukanej frazy "andrzej nowakowski - kiedy nadejdzie jutro" zwraca:

andrzej nowakowski - kiedy nadejdzie jutro
andrzej nowakowski - kiedy
andrzej nowakowski - andrzej nowakowski - nadzieja
andrzej nowakowski - zmierch
andrzej nowakowski
andrzej nowakowski - zima

natomiast drugie zapytanie dla tej samej frazy zwraca

andrzej nowakowski - kiedy nadejdzie jutro
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: 19.08.2025 - 18:34