Naravno da ne radi jer kada ne stavis kriterijum ne znaci da ce upit da ignorise taj deo, napraotiv, izgledace ovako:
Code (sql):
SELECT * FROM tabela WHERE usluga='' AND tip = 'neka vrednost'
I sam vidis da nece ignorisati uslugu nego ce traziti one recorde cija ja usluga prazna celija.
Jedan nacin ti je da ubacis
LIKE i % svuda tako da bude
usluga LIKE '%" . mysql_real_escape_string($_POST['usluga']) . "'. Kada prosledis praznu vrednost svesce se na
usluga LIKE '%' sto ce vratiti sve
NOT NULL vrednosti. Ovde je problem ako imas null u bazi i treba ti record sa null. Mada se i to moze zaobici zamenom NULL vrednosti sa praznim stringom. Takodje je problem ako imas vrednosti koje se zavrsavaju isto.
Primer:
jednosoban stan i
stan. Kada budes izbarao
stan vratice ti i recorde za i za
stan i za
jednosoban stan.
Drugo resenje vraca i null vrednosti. Zahteva malo zezanja oko pravljenja upita.
Radi se ovako:
- ako su oba prazna ne dodajes
WHERE
- ako nije izabrana
usluga uopste ne dodajes string
usluga=' i posle
'
- ako nije izabrana
usluga ILI nije izabran
tip ne dodajes
AND
- ako nije izabran
tip ne dodajes
tip = ' i posle
'
Tako formirani upit prosledis na izvrsavanje.
U tvom primeru gde je za
Izaberite value prazan mozes da ostavis samu konkatenaciju vrednosti jer nece ubaciti nista.
Sidetopic:
Imas pogresan dizajn baze. Svaki od ovih optiona koji imas treba biti FK, tj value ce biti ID te vrednosti u maticnoj tabeli.
[Ovu poruku je menjao plague dana 01.04.2013. u 13:54 GMT+1]