![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam prosty skrypt wyszukiwania danych z bazy. Problemy zaczynając się gdy chce wyszukać dwa wyrazy np Nokia 3220
Oraz plik html
W jaki sposób zmodyfikować zapytanie do bazy aby wyszukiwało też po dwóch słowach? Czy trzeba $query rozdzielić po spacji? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
lub
Jeśli modele i marki nie zawierają inny łańcuchów znaków, tylko są to stricte modele i marki, to możesz zamiast LIKE użyć porównania. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tak twój przykład działa jeśli oddzielnie przekażesz model i marke telefonu.
U mnie dane pobierane są z input do zmiennej $search po której dalej wyszukuję. Znajduje jak wpiszę sam model lub samą markę ale gdy wcisnę spacje wyniki znikają |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Dlatego też powinieneś rozdzielić szukaną frazę.
Myślisz, że uda się w mniejszym zbiorze znaleźć większy zbiór? -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dodałem kod ale wywala błąd. Undefined offset: line 16 Ten post edytował nikos 11.07.2017, 11:32:57 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A czasem nie wywala tego błędu przy jednym wyrazie?
Przemyśl jeszcze działanie jeśli ktoś wpisze frazę z więcej niż dwóch wyrazów. -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie nie zaraz jak nacisnę spacje to wywala ten błąd
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie bardzo rozumiem? W jakim celu wykorzystać trim? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
trim wyczysci ci tylko zbedne spacje na poczatku i na koncu.
Blad zas co pokazales wynika z tego $calosc = explode($search, ' '); $model = $calosc[0]; $marka = $calosc[1]; Zawsze zakladasz ze istnieje $calosc[1] co jest rzecz jasna blednym zalozeniem bo nie zawsze ktos w wyszukiwarce wpisze dwa slowa. Musisz sprawdzc czy $calosc[1] istnieje i w zaleznosci od tego szukac albo dwoch slow albo jednego. Od biedy jak nie istnieje to za $marka podstawiac nic ale to i tak wowczas zapytanie bedzie do kitu -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
trim pomoże Ci przy linijce: if(search != '')
Jeśli przed tym dasz trim na wartości, to nie będziesz słał wartości dopóki nie pojawi się inny znak niż biały znak. Czyli rozwiąże problem, o którym pisałeś wyżej. -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
trim wyczysci ci tylko zbedne spacje na poczatku i na koncu. Blad zas co pokazales wynika z tego $calosc = explode($search, ' '); $model = $calosc[0]; $marka = $calosc[1]; Zawsze zakladasz ze istnieje $calosc[1] co jest rzecz jasna blednym zalozeniem bo nie zawsze ktos w wyszukiwarce wpisze dwa slowa. Musisz sprawdzc czy $calosc[1] istnieje i w zaleznosci od tego szukac albo dwoch slow albo jednego. Od biedy jak nie istnieje to za $marka podstawiac nic ale to i tak wowczas zapytanie bedzie do kitu Właśnie myślałem, że mogę sprawdzić ilość słów w $search np tak w kodzie PHP
Ale to nie załatwiało błędu więc
Zmieniłem kod na taki. Błąd zniknął ale w momencie jak wcisnę spacje i wpisuję drugie słowo nie mam wyników... Przypuszczam, że liczenie słów po stronie php działa ale nie w momencie gdy przesyłamy dane za pomocą ajax live Pozdrawiam trim pomoże Ci przy linijce: if(search != '') Jeśli przed tym dasz trim na wartości, to nie będziesz słał wartości dopóki nie pojawi się inny znak niż biały znak. Czyli rozwiąże problem, o którym pisałeś wyżej. Dziękuje za odpowiedź Po zmianach w php dodałem też funkcję trim
Która powoduje że wyniki nie znikają po spacji (tak jak napisałeś) ale dopiero jak zacznę wpisywać pierwszą literę modelu |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Przemyśl działanie skryptu pod kątem wielu wyrazów, proponowałem Ci to wcześniej.
Co z tego, że w tym momencie obsłużysz dwa wyrazy, skoro ktoś może wpisać: Super Nokia 3310. Obecnie złapiesz tylko: Super Nokia. -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Przemyśl działanie skryptu pod kątem wielu wyrazów, proponowałem Ci to wcześniej. Co z tego, że w tym momencie obsłużysz dwa wyrazy, skoro ktoś może wpisać: Super Nokia 3310. Obecnie złapiesz tylko: Super Nokia. Tak jest to ważne zgadzam się ale nie przychodzi mi nic do głowy na razie i tak nie wyszukuje mi po dwóch słowach j.w. wyniki znikają jak zaczynam wpisywać pierwszą literę drugiego słowa: Nokia - są wyniki Spacja - są wyniki 3 - brak wyników Pozdrawiam |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź dokładną treść zapytania.
-------------------- |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź dokładną treść zapytania. Pomogła zmiana pliku php który zmieniłem następująco:
Zmiana składni zapytania w bazie pomogła teraz wyszukuję po dwóch słowach z dwóch kolumn. Dzięki za pomoc i podpowiedzi! Ten post edytował nikos 12.07.2017, 09:40:17 |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A jeśli wpiszesz: "3310 Nokia", to jaki wynik otrzymasz?
-------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 0 Dołączył: 30.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
A jeśli wpiszesz: "3310 Nokia", to jaki wynik otrzymasz? Tutaj brakuje wyników moje query sprawdza tylko po marka, model.
To załatwia sprawę. Jednak jeśli model składa się z większej ilości słów np 201 Lumia to w momencie jak wpiszę Nokia 201 wyszukuje ale już Nokia Lumia nie jeśli wpisze Nokia 201 Lumia to wyświetla. Testuje dalej |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 07:25 |