SQL Leere Werte ignorieren + mehrere Tabellen gleichzeitig ansprechen

Registriert
Dez. 2010
Beiträge
709
Hallo,

ich bin gerade dabei einen Mediendatenbank zu programmieren und habe Probleme mit SQL. Folgender Quellcode (in OpenOfficeBasic eingebettet):

Code:
	sqlAnfrage = 	"SELECT ""titel"", ""genre"" FROM ""T_Werke"" WHERE ""genre"" = '" & auswahlKombinationsfeldGenre & "'" &_
					"AND ""musikalischeEpoche"" = '" & auswahlKombinationsfeldMusikalischeEpoche & "'" &_
					"AND ""historischeEpoche"" = '" & auswahlKombinationsfeldHistorischeEpoche & "'" &_
					"AND ""sachgebiet"" = '" & auswahlKombinationsfeldSachgebiet & "'" &_
					"AND ""erscheinungsdatum"" = '" & auswahlDatumsfeldErscheinungsdatumFormatiert & "'"

1. habe ich das Problem, das wenn eine Variable 0 ist nach 0 gesucht wird und damit kein Ergebnis geliefert werden kann. Ich möchte aber nicht, dass man alle Parameter ausfüllen muss, damit man etwas findet.

2. habe ich noch weitere WHERE-Bedingungen, die die Suchanfrage ergänzen sollen. Nur stehen die Attribute, auf die sich diese Bedingungen beziehen, in einer anderen Tabelle.

3. Möchte ich dann noch Werte aus der anderen Tabelle selektieren.

MfG
 
Also falls du wirklich egal welche Werte eingefügt werden danach suchen willst, müsstest du die einzelnen Eingaben mit einer "OR" - Bedingung, statt einem "And" suchen.

Das blöde ist dann halt, dass die ausgegebenen Einträge, jeweils zB. auch nur einer der 4 von dir geforderten Eingaben entsprechen können, sprich die zahl der unnützen Einträge steigt.

Alternativ könntest du wichtige Eingaben als zwingende Eingaben vom Nutzer verlangen die immer eingegeben werden müssen, diese per "And"-Bedingung abfragen, und andere Eingaben optional dann halt mit "Or" abfragen.

Eine Weitere möglichkeit (hab noch nie was in OpenOffice programmiert, weiss daher nicht ob das geht) wäre dass du vor der Abfrage per "if" oder "switch" prüfst, ob für die einzelnen Eingaben eine Eingabe gemacht wurde und entsprechend dann andere SQL-Abfragen ausführst.
Das wäre wohl die sauberste, wenn auch für dich aufwendigste Variante die ich grad sehe.


Viel Erfolg!
 
Zu 1: Lass halt beim Zusammenbauen der Abfrage den betreffenden Teil weg, wenn eine Variable 0 ist.
Zu 2 und 3: Schau dir mal JOINs an.
 
die Steuerung musst du im umgebenden Skript machen (OpenOfficeBasic ?) und damit entsprechend das passende SQL zusammenbauen, das dann ausgeführt wird. Direkt mit SQL wird das nicht klappen.

Die Abfrage auf den jeweiligen Wert darf nur in das SQL-Statement rein, wenn die Variable nicht 0 ist.
 
mugam schrieb:
die Steuerung musst du im umgebenden Skript machen (OpenOfficeBasic ?) und damit entsprechend das passende SQL zusammenbauen, das dann ausgeführt wird. Direkt mit SQL wird das nicht klappen.

Die Abfrage auf den jeweiligen Wert darf nur in das SQL-Statement rein, wenn die Variable nicht 0 ist.

Könntest du mir dazu einen Quellcode-Vorschlag geben?
 
Leider nein, da ich nicht mit OpenOffice arbeite, kann nur allgemeine Tips geben, ich arbeite unter Solaris mit Shell-Skripten und Informix-SQL.

Aber es sollte bei dir auch if- oder wenn-Abfragen geben, mit denen du die Variablen abfragen kannst und auf Basis der Variablenwerte dann das SQL zusammensetzen.
 
Aber dann müsste ich ja für jede erdenkliche mögliche Kombination an Abfragen eine SQL-Anweisung schreiben. Das ist bei mehr als ca. 10 Anweisung nicht möglich...
 
Wieso?

du musst die Select-Anweisung aus Einzelteilen zusammensetzen, dann mußte du nicht jede Möglichkeit komplett programmieren.

So irgendwie (kenne die OpenOffice Syntax nicht).

sqlAnfrage = "SELECT ""titel"", ""genre"" FROM ""T_Werke"" WHERE ""genre"" = '" & auswahlKombinationsfeldGenre & "'"

if "musikalischeEpche" != "0"
then sqlAnfrage=sqlAnfrage&"AND ""musikalischeEpoche"" = '" & auswahlKombinationsfeldMusikalischeEpoche & "'"

if "historischeEpoche" != "0"
then sqlAnfrage=sqlAnfrage&"AND ""historischeEpoche"" = '" & auswahlKombinationsfeldHistorischeEpoche & "'" &_
 
Zuletzt bearbeitet:
lt. Internetinfos kann man Strings mit & verknüpfen,
deshalb sqlanfrage=sqlanfrage&...., da wird dann der nächste Teil dahintergehängt.


Und wenn alles zusammengesetzt ist, dann kann die SQL-Abfrage ausgeführt werden.

Einfach mal google benutzen.
 
MTC1 schrieb:
Und wie soll ich diese Einzelteile dann verbinden? Basic trennt SQL-Code von Basic-Code ja strikt.

Tut es. Aber das ist nicht das Problem ;) Das Problem ist, dass du momentan zu faul bist, deinen Code umzuschreiben. Leider kenne ich mich 0 aus in deinem Basic, daher in PHP ein kurzes Beispiel, Verknüpfungsoperator zwischen Strings ist der Punkt (.):


$sSql = 'SELECT * FROM tabelle WHERE (feld1 = '.$Feld1.' OR feld1=0) AND feld2 = '.....

Das ist die Lösung für dein erstes Problem. Für dein zweites Problem googlest du bitte nach 'SQL JOIN TUTORIAL' und wenn du dann noch Hilde brauchst postest du bitte die Tabellenstruktur und deine genauen Anforderungen...
 
Zurück
Oben