![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 0 Dołączył: 6.01.2009 Ostrzeżenie: (20%) ![]() ![]() |
Mam w tabeli trzy kolumny. Imię, nazwisko, nick. Np. Jan, Kowalski, Kowal. I teraz moje pytanie. Jeżeli użytkownik chcę go znaleźć i wpisuje w wyszukiwarkę Jan Kowalski Kowal, to jak zrobić, żeby like dotyczyło wszystkim kolumn i dopasowywało fragment z tego kodu? bo takie coś to niestety nie działa:
SELECT * FROM `users` WHERE (`imie` LIKE 'Jan Kowalski Kowal') OR (`nazwisko` LIKE 'Jan Kowalski Kowal') OR (`nick` LIKE 'Jan Kowalski Kowal') |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
to nie jest takie proste.
Zrob sprytny kod który ci to ułatwi 1) rozbije ciag na słowa 2) wstawi te slowa do poszczegolnych kolumn w takiej postaci [sql] pole LIKE '%slowo1%' OR pole like '%slowo2%' itd przydatne funkcje http://php.net/explode - rozbijanie na slowa http://php.net/implode - warunki wrzucasz do tablicy ktore potem laczysz ciagem ' OR ' |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 0 Dołączył: 6.01.2009 Ostrzeżenie: (20%) ![]() ![]() |
Już próbowałem rozbijać, ale doszedłem do wniosku, że jeżeli użytkownik np wpiszę: Jan Kowalski Janek pogromca czarnych jajek. To co wtedy? już nie będzie tak łatwo, że to rozbiję, bo nie wiem ile będzie słów, dlatego szukam jakiegoś innego rozwiązania.
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
musisz ograniczyc uzytkownikowi ilsoc znakow albo słow. to juz zalezy od ciebie. ta metoda jest najprostsza pomijajac wyszukiwanie pełnotekstowe (fulltext)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 0 Dołączył: 6.01.2009 Ostrzeżenie: (20%) ![]() ![]() |
uznałem, że 5 słów to najwięcej ile może być sprawdzane ze wszystkimi polami: oto kod dla imie i nazwisko
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
to wcale nie jest sprytny skrypt...
Czyż nie łatwiej + bezpieczniej + efektywniej Ja rozumiem początkujący etap ale podałem ci link do implode który jest bardzo dużym ułatwieniem Ten post edytował wookieb 18.07.2009, 22:44:03 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 0 Dołączył: 6.01.2009 Ostrzeżenie: (20%) ![]() ![]() |
Ale tutaj nawet na początku zapytania na wstępie wywali OR a przecież pierwszy `name` nie może być z OR
|
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Sprawdź a potem mów.
Twój post oznacza, że nadal nie przeczytałeś o implode... Ten post edytował wookieb 18.07.2009, 22:53:53 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 6 Dołączył: 15.07.2009 Skąd: Śląsk->Ruda Śląska Ostrzeżenie: (0%) ![]() ![]() |
implode wstawia OR pomiędzy wyrazy, analogicznie z tego co piszesz należałoby sądzić, że po ostatnim parametrze też doda OR a tak nie jest. kod, który podał wookieb na pewno jest poprawny.
Ten post edytował planet 19.07.2009, 12:56:32 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 1 Dołączył: 25.02.2006 Skąd: Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
SELECT * FROM `users` WHERE (`imie` LIKE 'Jan Kowalski Kowal') OR (`nazwisko` LIKE 'Jan Kowalski Kowal') OR (`nick` LIKE 'Jan Kowalski Kowal') Innym sposobem jest złączenie "kolumn" poprzez funkcję CONCAT, chociaż rozwiązanie to może być kosztowne.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 01:36 |