![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam sobie wyszukiwarke osob ktore zarejestrowaly sie na mojej stronie. Tabela danych tych osob: ID | Imie | Nazwisko | Miejscowsc | itd I teraz problem polega na tym ze wpisujac w formularzu znajdz np. Jan Kowalski, to skrypt pyta sie w do tabelki: select * from tabelka where nazwisko like '%Jan Kowalski%' and imie like '%Jan Kowalski%' to zapytanie da 0 wynikow. Jan Kowalski jest wpisywane w jednym polu. W jaki sposob zadac pytanie badz przerobic skrypt php aby dojsc do takiej formy: select * from tabelka where nazwisko like '%Kowalski%' and imie like '%Jan%'? Czy tworzac indeksy w tabelce dla Imie i Nazwisko badz explod`ujac Jana Kowalskiego na dwa oddzielne wyrazy (tworzac z niego tablice i najpierw przeszukac Jan a potem Kowalski). Czy te dwie metody dadza rozwiazanie? (tablica moze byc malo wydajna przy wiekrzej ilosc slow?) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 12.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
jeśli zawsze ktos bedzie szukal w formie [imie]_[nazwisko] to rozbij ten ciag na dwa stringi i daj zapytanie:
select * from tabelka where nazwisko like '%[nazwisko]%' and imie like '%[imie]%' |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 27 Dołączył: 27.05.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej przerób formularz na oddzielne pola imie i nazwisko, a dlaczego? Bo explode utrudni Ci tylko zadanie w przypadku gdy np. ktoś będzie miał dwa imiona i ktoś będzie w ten sposób wyszukiwał albo ktoś będzie miał nazwisko dwuczłonowe.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
No to w jaki sposob jest zrobiona wyszukiwarka osob np. w najpopularniejszym serwisie przyjaciol szkolnych. Wpisujemy w wyszukiwarce np. Jan Kowalski badz Kowalski Jan to zawsze otrzymamy ten sam wynik. Więc jednak da sie to jakos zrobic. Najprawdopodobniej kazde slowo jest przeszukiwane oddzielnie, tylko ze jakos to musieli fajnie zrobic ze tak szybko dziala. Bo tak ponaszemu jak tu piszemy to kazde slowo bedzie przeszukiwane oddzielne:
imie like '%jan%' and nazwisko like '%jan%' and imie like '%kowalski%' and nazwisko like '%kowalski%' . To jest dobre rozwiazanie jak mamy mala baze, a jezeli bedziemy mieli jakies 100 000 danych do przeszukania, to ten skrypt bedzie dzialal i dzialal. Prosze o pomoc |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Bo tam nie używają LIKE gdyż to zabija bazę.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mozna dokladniej, tworza indeksy dla tabeli?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Na takie tematy to na PHP Pro
Temat: wyszukiwarka |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Bo po co dawać like? Jan to Jan... Nie chce żeby mi znalazło Janosik, albo Wonajan (nazwisko powiedzmy).
WHERE nazwisko = 'Jan' OR imie = 'Jan' OR nazwisko = 'Kowalski' OR imie = 'Kowalski' -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Źle
Jednak nie jest to zbyt praktyczne. Ten post edytował wlamywacz 29.06.2008, 11:00:10 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Skrypcik generujacy zapytanie do bazy:
Wygeneruje nam zapytanie po wpisaniu w wyszukiwarce np: Jan Kowalski
Czy to ma sens? |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Ma. Nie powiem troche to zagmatwałeś. Mogłeś odrazu dać budowe zapytania.
EDIT: Poprawiłem. Chyba bedzie ok. Ten post edytował bim2 29.06.2008, 12:34:24 -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
EDIT: teraz jest tak:
ten skrypt da nam teraz
a powinno byc
Pisanie takich skryptow jest zlym rozwiazaniem: 1. Wpisujac Jan to bedzie szukac imie=jan i nazwisko=jan wiec jest bez sensu 2. przy trzech slowach juz trzeba sprawdzac wszystkie kombinacje 3. malo wydajne pzy wiekrzej ilosci danych 4. generowane zapytanie staje sie zbyt dlugie co juz samo spowolni dzialanie Wniosek: Szukac innego rozwiazania, byc moze ktos ma jakis pomysł? Ten post edytował kilinho 29.06.2008, 13:29:10
Powód edycji: jak używasz bbcode to poprawnego
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Jak nie wydajne? Maksymalnie ktoś wpisze 3 wyrazy...
Poprawiony:
Działa ładnie i jest wydajne moim zdaniem. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 13:10 |