Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Sorowanie według kolejności like
sannin
post
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Cześć,

mam zapytanie do wyszukiwarki "Nowak Ryszard". Wyszukuję takim zapytaniem:

  1. SELECT * FROM users WHERE name LIKE '%Nowak Ryszard%' OR name LIKE '%Nowak%'


Wyniki są, ale mam problem z posortowaniem. Chciałbym, aby te które zostały znalezione po całej frazie czyli "Nowak Ryszard" były na początku, a dopiero później te które zostały znalezione po frazie "Nowak". Zależy mi na tym, aby rozwiązać to bez php.

Go to the top of the page
+Quote Post
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


poczytaj sobie o wyszukiwaniu pełnotekstowym ( MYSQL FULL TEXT SEARCH) tam możesz ustawić order po zgodności z hasłem
Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Jeżeli zdecydujesz sie na fulltext to poczytaj http://forum.php.pl/index.php?showtopic=161392&hl=sphinx


--------------------
Go to the top of the page
+Quote Post
sannin
post
Post #4





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Wszystko fajnie tylko nie bardzo kumam dlaczego przy takim zapytaniu:
Cytat
SELECT * FROM `users`WHERE MATCH (name) AGAINST ("Nowak Ryszard" IN BOOLEAN MODE)

To dostaje wyniki z Nowak, a zarazem i Ryszard. Na strony mysql nie ma praktycznie nic na ten temat.

Ten post edytował sannin 21.12.2010, 21:48:10
Go to the top of the page
+Quote Post
modern-web
post
Post #5





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Spróbuj tak:

  1. SELECT * FROM `users`WHERE MATCH (name) AGAINST ('+Nowak +Ryszard' IN BOOLEAN MODE)


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
sannin
post
Post #6





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Strasznie ciężko jest znaleźć coś w necie na ten temat. Powiesz mi jeszcze jak to po sortować według trafności?
Go to the top of the page
+Quote Post
modern-web
post
Post #7





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Wydaje mi się, ze wystarczy Ci taki dopisek:

  1. ORDER BY MATCH (przykladowa_kolumna) AGAINST ('+Nowak +Ryszard' IN BOOLEAN MODE)


Ten post edytował modern-web 21.12.2010, 23:43:39


--------------------
Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
Go to the top of the page
+Quote Post
tehaha
post
Post #8





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Cytat(sannin @ 21.12.2010, 22:35:37 ) *
Strasznie ciężko jest znaleźć coś w necie na ten temat. Powiesz mi jeszcze jak to po sortować według trafności?


to chyba słabo szukałeś, bo w manualu masz pełny przykład z opisem: http://dev.mysql.com/doc/refman/5.0/en/ful...l-language.html

  1. SELECT id, body, MATCH (title,body) AGAINST ('Security implications of running MySQL as root') AS score FROM articles WHERE MATCH (title,body) AGAINST ('Security implications of running MySQL as root') ORDER BY score DESC

Go to the top of the page
+Quote Post
sannin
post
Post #9





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Dzięki smile.gif Przeglądałem to, ale z moim angielskim słabo biggrin.gif i nigdy bym nie pomyślał, że to to.
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 - 17:54