AND statement niet mee laten doen

  • Onderwerp starter Onderwerp starter rxr
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

rxr

Gebruiker
Lid geworden
24 okt 2008
Berichten
105
Hallo,

Ik heb door middel van html een leuk formuliertje gemaakt. Nu kun je in dit formuliertje aangeven waar je op wilt zoeken en niet. Het is de bedoeling dat de resultaten voldoen aan alle opgegeven criteria dus alles moet moet een and statement maar nu kunnen ze dus aangeven welke niet. Hoe kan ik in sql aangeven wanneer hij niet mee doet

ik had al geprobeerd om zoiets te doen

AND criteria1 = "true"

maar dat hielp ook niet en een asterisk er voor in de plaats hielp ook niet (*)

iemand een suggestie ?
 
Zoek je naar AND NOT?

Als je bedoelt dat het hele criteria genegeerd moet worden, dan moet je het niet in de query stoppen; dat is de enige manier.
 
maar dat weet ik niet van te voren. Ik heb zeg maar 8 criteria maar welke de gebruiker gaat invoeren weet ik niet. De ene keer kan het 1 zijn maar de volgende 7.

Alle andere oplossingen heb zijn zo omslachtig. Kan ik een statement niet gewoon negeren door de vergelijking te veranderen in een * of iets anders ?
 
Ik weet niet of ik begrijp wat je bedoeld, maar is dit niet wat?

AND criteria1 = criteria1
 
Ze kunnen aangeven welke niet ? Dus eigenlijk hetzelfde als dat ze kunnen aangeven welke wel. :p

Dan misschien iets als:

select * where keuze=1

en dan de uitkomst naar select * where keuze=2
en zo door.
 
Hoi,

Je hebt een aantal verschillende voorgedefinieerde critera (zoals google advanced search dat ook heeft). Je wilt de mensen deze velden kunnen laten invoeren maar ze niet verplichten ze allemaal te gebruiken. Als dit is wat je wilt kun je het op de volgende manier benaderen:
(code in python en sql)

Code:
sql_statement = 'select veld1, veld2 ... from tabel where 1=1 '
conditie_gebruikt = 0
if form.get('conditie1_zoekterm') is not null :
    conditie_gebruikt = 1
    zoekterm = sanitize(form.get('conditie1_zoekterm'))
    uitsluiten = sanitize(form.get("contitie1_uitsluiten"))
    if uitsluiten == True: 
       uitsluiten = " not "
    else 
       uitsluiten = " " 
    sql_statement += " and "+ uitsluiten +" field1 like '"++"' "

if form.get('conditie2_zoekterm') is not null :
    conditie_gebruikt = 1
    zoekterm = sanitize(form.get('conditie2_zoekterm'))
    uitsluiten = sanitize(form.get("contitie2_uitsluiten"))
    if uitsluiten == True: 
       uitsluiten = " not "
    else 
       uitsluiten = " " 
    sql_statement += " and "+ uitsluiten +" (field1 like '"++"' )"

...

assert conditie_gebruikt > 0, "Geen minimaal 1 zoekcriterium op. "
results = database_connection.execute(sql_statement)

Dit is natuurlijk een stuk generieker op te lossen door een functie en fatsoenlijk parametrisering maar het idee is werkend: alleen als iemand iets invult in het zoekscherm wordt er een conditie opgenomen in de sql statement. De sanitize methode heb ik even opgenomen om aan te geven dat je moeite moet doen om SQL Injection te voorkomen.

Hope this helps!

disclaimer: de bovenstaande tekst is geheel geschreven in de tekst editor van deze site. syntax en tikfouten zullen er plenty zijn. Ook denkfouten zijn niet uitgesloten. :)
 
Voorbordurend op Epic en wetend dat de vraag al zowat anderhalve maand oud is...


select bla
from bla
where kolom1 = NVL(waarde1, kolom1)
AND kolom2 = NVL(waarde2, kolom2)
etc

Als de gebruiker een waarde invult voor een bepaalde kolom dan wordt de conditie meegenomen (kolom1=waarde1), als de gebruiker geen waarde invult is waarde2 NULL, dus zorgt de NVL-functie ervoor dat de conditie kolom2=kolom2 wordt, hetgeen altijd waar is (tenzij kolom2 zelf NULL is, mssn moet je er daarvoor nog een NVL links en rechts omheen gooien).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan