Entwickler-Ecke
Datenbanken - SQL-Abfragen logisch Verknüpfen (AND, OR etc)
kiwicht - Fr 24.01.03 11:35
Titel: SQL-Abfragen logisch Verknüpfen (AND, OR etc)
Hallöle...
Folgendes Problem:
1 Datenbank. In dieser 4 relevante Felder. 2 EditFelder.
1. EditFeld liefert Suchstring für DBFeld 1
2. EditFeld liefert Suchstring für DBFeld 2, 3 ODER 4
Ich versuche also folgendes zu realisieren:
1. in DBFeld1 zeige nur die, und immer nur die, die mit Edit1
übereinstimmen
2. suche in DBFeld2, 3 und 4 nach Ähnlichkeiten mit Edit2, und zeige
diese zusätzlich zur 1. filterung an
so hab ichs probiert, klappt aber nicht:
SELECT * FROM datenbank WHERE dbfeld1 = 'edit1'
AND dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'
dann hab ichs so probiert, geht auch nicht:
SELECT * FROM datenbank WHERE dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'
AND dbfeld1 = 'edit1'
klingt warscheinlich kompliziert, aber ich hoffe ihr wisst was ich meine.. :D
mfg
kiwicht
hansa - Fr 24.01.03 13:16
Titel: Re: SQL-Abfragen logisch Verknüpfen (AND, OR etc)
Hi,
| kiwicht hat folgendes geschrieben: |
SELECT * FROM datenbank WHERE dbfeld1 = 'edit1'
AND dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'
|
Ich gehe jetzt nur hierauf ein. Erstens hat AND Priorität, auch ohne gesetzte Klammern. Also machst Du hier folgendes : Du kriegst nur etwas zurückgeliefert, sofern edit 1 und 2 in der DB gefunden werden. Sewhe ich das richtig, so kannst Du die ORs auch gleich weglassen. So müßte es aber gehen :
Quelltext
1: 2: 3:
| AND (dbfeld2 = 'edit2' OR dbfeld3 = 'edit2' OR dbfeld4 = 'edit2') |
Gruß
Hansa
opfer.der.genauigkeit - Fr 24.01.03 13:17
Weiß nicht ganz was du meinst. Habs auch ehrlich gesagt nur überflogen.
Probiers mal mit dem JOIN Befehl und verwende LIKE statt =. (wobei letzteres kein Problem darstellen sollte).
Ich glaub aber nicht, daß das ist, was du meinst.
Nachtrag:
Is ja dummfug was ich sage.
Du arbeitest ja nicht mit mehreren Tabellen. :)
kiwicht - Fr 24.01.03 13:30
Jepp, mit Join hatte ich auch schon geliebäugelt, und dann über den Umweg einer temporären Tabelle... ich lies es sein,
denn die Lösung mit Klammern funktioniert... hätt ich damals in Wahlpflicht Logik-Mathe bloss besser aufgepasst... :D :D
Danke für die Hilfe!
hansa - Fr 24.01.03 13:45
Hi,
| Zitat: |
... hätt ich damals in Wahlpflicht Logik-Mathe bloss besser aufgepasst...
|
hehe, ich habs gemacht. :mrgreen: So was einfaches mit Joins oder sogar temp. Tabellen.... :hair:
Gruß
Hansa
smiegel - Fr 24.01.03 14:29
Hallo,
was willst Du damit?
| Zitat: |
SELECT * FROM datenbank WHERE dbfeld1 = 'edit1'
AND dbfeld2 = 'edit2'
OR dbfeld3 = 'edit2'
OR dbfeld4 = 'edit2'
|
Ist doch klar, dass nichts gefunden wird, solange in der DB keine Einträge vorhanden sind, die "edit1" und "edit2" enthalten.
Ich würde einmal folgendes Probieren:
Quelltext
1: 2: 3: 4: 5: 6:
| var s:String; ... s:='SELECT * FROM datenbank WHERE dbfeld1=''%s'' AND dbfeld2=''%s'' OR dbfeld3=''%s'' OR dbfeld4=''%s'''; MyQuery.SQL.Text:=Format(s, [edit1.Text, edit2.Text, edit2.Text, edit2.Text]); MyQuery.Open; ... |
Oben beschriebenes Verfahren gilt für Strings und die Annahme, dass Edit1 und Edit2 keinen Leerstring enthalten.
hansa - Fr 24.01.03 15:08
Hi,
| Zitat: |
Oben beschriebenes Verfahren gilt für Strings und die Annahme, dass Edit1 und Edit2 keinen Leerstring enthalten.
|
...und würde genau so wenig funktionieren, wie das ursprüngliche. :mrgreen:
@kiwicht : Geht es doch nicht? :?!?:
kiwicht - Fr 24.01.03 16:44
jupp.. die klammer-methode funzt hervoragend... und bei der von smiegel, seh ich nich durch... :oops: die ergibt doch das gleiche wie meine lösung, einmal AND, dreimal OR.. nunja, egal, jetzt geht es ja! :D
smiegel - Fr 24.01.03 17:03
Hallo,
@hansa
stimmt, Du hast recht. Habe in meinem Beispiel vergessen die Klammer zu setzen. Man sollte nicht nur einfach über die Postings hinweglesen sondern sie eigentlich richtig lesen.
hansa - Fr 24.01.03 19:28
Hi,
| smiegel hat folgendes geschrieben: |
| Habe in meinem Beispiel vergessen die Klammer zu setzen. Man sollte nicht nur einfach über die Postings hinweglesen sondern sie eigentlich richtig lesen. |
Was soll ich dazu noch sagen ? :shock: Genauso isses. Dasselbe Problem wie vorher. :P
Gruß
Hansa
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!