Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql]]php] Wyszukiwarka kilku parametrów
Forum PHP.pl > Forum > Przedszkole
jaslu
Witam
Robię wyszukiwarkę i jak do tej pory udało mi się zrobić taką która wyszukuje gdy zadamy jej kilka warunków.

SELECT * FROM tabela WHERE warunek1 AND warunek2 AND warunek3 and warunek4 itd,

ale chciałbym zrobić tak, że nawet gdyby któryś z warunków nie został spełniony to zostałyby wyszukane pozycje które spełniają pozostałe warunki.

Bardzo proszę o jakieś wskazówki, może jakieś przykłady.
drPayton
To zrób OR zamiast AND winksmiley.jpg
Foxx
  1. SELECT * FROM tabela WHERE warunek1 OR warunek2 OR warunek3


A jeżeli chodzi o to, żeby zezwolić na niespełnienie tylko jednego warunku przy spełnionych pozostałych to np tak:

  1. SELECT * FROM tabela WHERE (warunek1 AND warunek2) OR (warunek1 AND warunek3) OR (warunek2 AND warunek3)
jaslu
Może wypowiedziałem się mało precyzyjnie, chodzi mi o wyszukiwarkę nieruchomości.
Jeżeli np. tylko cena nie będzie spełniała warunku, to chciałbym żeby takie ogłoszenie także zostało wyszukane, ale z drugiej strony żeby zapytanie nie zwracało całej bazy. To samo tyczy się innych warunków. A co do

SELECT * FROM tabela WHERE (warunek1 AND warunek2) OR (warunek1 AND warunek3) OR (warunek2 AND warunek3)


to wszystko fajnie wyglada jak jest mało warunków, ale w przypadku wszystkich które mogą być wybrane, a jest ich 12 sprawa wyglada troche gorzej i wypisanie wszystkich warunków troche potrwa.
Foxx
Jeżeli robisz podstawową wyszukiwarkę nieruchomości na stronie to wg. mnie powinieneś wszystkie warunki połączyć za pomocą OR. Albo możesz umożliwić ludziom wybranie czy chcą dostać wyniki wyszukiwania spełniające wszystkie warunki czy którykolwiek z warunków.
Natomiast dziwna mi się wydaje opcja "najwyżej jeden warunek niespełniony". O ile dobrze cię zrozumiałem na początku, bo nie wiem co masz na myśli pisząc "ale z drugiej strony żeby zapytanie nie zwracało całej bazy.".
jaslu
Cytat(Foxx @ 11.11.2007, 15:36:23 ) *
Jeżeli robisz podstawową wyszukiwarkę nieruchomości na stronie to wg. mnie powinieneś wszystkie warunki połączyć za pomocą OR. Albo możesz umożliwić ludziom wybranie czy chcą dostać wyniki wyszukiwania spełniające wszystkie warunki czy którykolwiek z warunków.
Natomiast dziwna mi się wydaje opcja "najwyżej jeden warunek niespełniony". O ile dobrze cię zrozumiałem na początku, bo nie wiem co masz na myśli pisząc "ale z drugiej strony żeby zapytanie nie zwracało całej bazy.".



Wszystko w porządku, ale jesli wszystkie warunki połącze za pomocą OR i zaznacze je przy wyszukiwaniu to wyrzuci mi wszystkie ogloszenia.

A co do niespełnienia warunku.
Sprawa ma się tak, mam takie warunki:
wojewodztwo,
powiat,
miejscowosc,
cena minimalna,
cena maksymalna,

i teraz chcę aby np. jesli nie zostanie znalezione żadne ogłoszenie bo np. cena się nie zgadza to żeby wyszukało ogloszenie które spełnia pozostałe warunki, ale żeby nie wyszukiwało takich w których spełniony jest tylko jeden warunek.
Foxx
Pokaż swój kod, masz błąd bo nie powinno ci zwracać wszystkich rekordów...
jaslu
Cytat(Foxx @ 11.11.2007, 16:06:48 ) *
Pokaż swój kod, masz błąd bo nie powinno ci zwracać wszystkich rekordów...


Chyba dalej coś źle tłumacze. Wyszukiwarka działa dobrze ale jeśli np dam

select * from tabel where warunek2 or warunek2 or warunek3 or warunek4 or warunek5 or warunek6 or warunek7 or warunek8

to w pewnych sytuacjach może zwrócić mi zawartość całej tabeli. A ja poprostu chcę aby gdy wywyłam zapytanie

select * from tabel where warunek2 and warunek2 and warunek3 and warunek4 and warunek5 and warunek6 and warunek7

i nie zostanie znaleziony żaden rekord to, żeby zrobić coś takiego w wyniku czego zostanie wyświetlone ogłoszenie które nie spełnia np. jednego warunku (przyjmijmy, że jest to cena - w bazie jest podobne ogłoszenie ale podana cena jest wyższa niź zadana do wyszukania przez użytkownika), a z drugiej strony zeby też nie wyszukało rekordu spełniającego tylko jednego warunku z kilku.

Reasumując chciałbym zrobić taką wyszukiwarkę która znajdzie mi ogłosznie nie spelniające wszystkich warunków.


jeśli nie zostanie znalezione żadne ogłoszenie bo np. cena się nie zgadza to żeby wyszukało ogloszenie które spełnia pozostałe warunki, ale żeby nie wyszukiwało takich w których spełniony jest tylko jeden warunek.
Jednym słowem wyszukiwarkę niedeterministyczną.
Foxx
Według mnie ten problem jest trochę stworzony na siłę. Robisz ANDy a jak nie zwraca żadnego rekordu to cofasz do formularza wyszukiwania i podajesz komunikat mówiący, że nie ma ofert spełniających podane kryteria i, że sugerujesz rozszerzyć kryteria. I tyle.
Jak ja czegoś szukam i wybieram kryteria to nie chcę żeby mi wyświetlało rekordy, które twórca strony uznał, że mimo wszystko chcę zobaczyć. Chcę raczej zobaczyć że nie ma takich rzeczy jakich szukam i jak będę chciał to sobie zmienię kryteria. To wprowadza w błąd, bo ktoś może nie analizować dokładnie wyników i stwierdzi że to jest dokładnie to czego chciał.
Oczywiście zrobisz jak uważasz, to tylko moja refleksja.
Jeżeli jednak się upierasz przy swoim rozwiązaniu to po prostu niech Twój skrypt, jeżeli zapytanie zwraca zero rekordów, usuwa jedno z kryteriów, które podał szukający (Ty określ które) i niech powtarza w pętli zapytania usuwając kolejne parametry aż nie zwróci czegokolwiek.
Problemem jest to, że jeżeli szukam
imie = jan
nazwisko = kowalski
a ty po pierwszym wykonaniu SELECT musisz usunąć któryś parametr i usuniesz nazwisko i znowu nie dostaniesz rekordów w których imie = jan podczas gdy mogły istnieć rekordy w których nazwisko = kowalski.
Tak więc Twoją metodą skończysz na wypisaniu wszystkich kombinacji parametrów wyszukiwania.
jaslu
Widzisz myślimy podobnie, tylko mój promotor chce takiej wyszukiwarki, ja nic na to nie poradzę. Coś jeszcze pokombunuję i zobacze co na to mój promotor. Dzięki za info.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.