Abfrage für einen Zeitraum erstellen und Abfrage auf ein "Teilwort" einstellen
Verfasst: Do 15. Feb 2018, 20:11
Hallo zusammen,
auch ich bin ein Neuling in Sachen Datenbank und SQL. Trotzdem habe ich es geschafft, eine Datenbank für meine CD Sammlung zu erstellen die meinen Ansprüchen genügt. Es funktioniert alles so wie es soll, auch die Abfrage die ich mit mehreren Suchparametern ausgestattet habe. Allerdings funktioniert dort eine Kleinigkeit nicht so ganz. Ebenso möchte ich die Suche ein wenig verfeinern und komme bei beiden Sachen nicht weiter.
Zum einen möchte ich, wenn ich z.B. nach einem CD Titel suche und nicht den kompletten Titel weiß, sondern nur meinetwegen die letzten beiden Wörter, diese beiden eingeben und das entsprechende Ergebnis bekommen. Das funktioniert leider nicht. Ich muß immer mit dem ersten Wort anfangen.
Zum Anderen möchte ich die Suche nach dem Jahr, in dem ein Lied/eine CD erschienen ist auf einen Zeitraum erweitern, z.B. "Suche alles von 1975 bis 1980" Bisher funktioniert die Suche nur über die Eingabe eines bestimmten Jahres. Ich denke mal, das die Abfrage um ein "ist kleiner, ist größer und oder ist gleich" erweitert werden müßte. Doch leider weiß ich nicht wie ich das einbauen soll. Ich würde das gerne über 2 Eingabefelder im Suchformular lösen, einmal mit "Von" und einmal mit "Bis". Muß ich dafür im Filter 2 neue Felder anlegen, z.B. "F_JahrX" für "Von" und "F_JahrY" für "Bis" und diese dann irgendwie in der Abfrage mit dem "F_Jahr" verknüpfen? Und wie sieht das Ganze dann aus? Oder kann man das alles über den bestehenden Filter für das Jahr machen. Und wenn ja wie?
Ich habe mal die SQL Abfrage hier eingestellt und auch ein Screenshot von der Filtertabelle und einen von der Tabelle für die Datenerfassung.
Schonmal Danke im Vorraus für eine Lösung.
SELECT "ID", "CDNr", "Titel", "Interpret", "CDTitel", "TrackNr", "Genre", "CDTyp", "Sammlung", "Länge", "Jahr", "Kommentar" FROM "01_Datenerfassung"
WHERE ( LOWER ( "Titel" ) LIKE LOWER ( :Titel || '%' ) OR :Titel IS NULL ) AND
( LOWER ( "Interpret" ) LIKE LOWER ( :Interpret || '%' ) OR :Interpret IS NULL ) AND
( LOWER ( "CDTitel" ) LIKE LOWER ( :CDTitel || '%' ) OR :CDTitel IS NULL ) AND
( LOWER ( "Jahr" ) LIKE LOWER ( :Jahr || '%' ) OR :Jahr IS NULL ) AND
( LOWER ( "Genre" ) LIKE LOWER ( :Genre || '%' ) OR :Genre IS NULL ) AND
( LOWER ( "CDTyp" ) LIKE LOWER ( :CDTyp || '%' ) OR :CDTyp IS NULL ) AND
( LOWER ( "Sammlung" ) LIKE LOWER ( :Sammlung || '%' ) OR :Sammlung IS NULL )
auch ich bin ein Neuling in Sachen Datenbank und SQL. Trotzdem habe ich es geschafft, eine Datenbank für meine CD Sammlung zu erstellen die meinen Ansprüchen genügt. Es funktioniert alles so wie es soll, auch die Abfrage die ich mit mehreren Suchparametern ausgestattet habe. Allerdings funktioniert dort eine Kleinigkeit nicht so ganz. Ebenso möchte ich die Suche ein wenig verfeinern und komme bei beiden Sachen nicht weiter.
Zum einen möchte ich, wenn ich z.B. nach einem CD Titel suche und nicht den kompletten Titel weiß, sondern nur meinetwegen die letzten beiden Wörter, diese beiden eingeben und das entsprechende Ergebnis bekommen. Das funktioniert leider nicht. Ich muß immer mit dem ersten Wort anfangen.
Zum Anderen möchte ich die Suche nach dem Jahr, in dem ein Lied/eine CD erschienen ist auf einen Zeitraum erweitern, z.B. "Suche alles von 1975 bis 1980" Bisher funktioniert die Suche nur über die Eingabe eines bestimmten Jahres. Ich denke mal, das die Abfrage um ein "ist kleiner, ist größer und oder ist gleich" erweitert werden müßte. Doch leider weiß ich nicht wie ich das einbauen soll. Ich würde das gerne über 2 Eingabefelder im Suchformular lösen, einmal mit "Von" und einmal mit "Bis". Muß ich dafür im Filter 2 neue Felder anlegen, z.B. "F_JahrX" für "Von" und "F_JahrY" für "Bis" und diese dann irgendwie in der Abfrage mit dem "F_Jahr" verknüpfen? Und wie sieht das Ganze dann aus? Oder kann man das alles über den bestehenden Filter für das Jahr machen. Und wenn ja wie?
Ich habe mal die SQL Abfrage hier eingestellt und auch ein Screenshot von der Filtertabelle und einen von der Tabelle für die Datenerfassung.
Schonmal Danke im Vorraus für eine Lösung.
SELECT "ID", "CDNr", "Titel", "Interpret", "CDTitel", "TrackNr", "Genre", "CDTyp", "Sammlung", "Länge", "Jahr", "Kommentar" FROM "01_Datenerfassung"
WHERE ( LOWER ( "Titel" ) LIKE LOWER ( :Titel || '%' ) OR :Titel IS NULL ) AND
( LOWER ( "Interpret" ) LIKE LOWER ( :Interpret || '%' ) OR :Interpret IS NULL ) AND
( LOWER ( "CDTitel" ) LIKE LOWER ( :CDTitel || '%' ) OR :CDTitel IS NULL ) AND
( LOWER ( "Jahr" ) LIKE LOWER ( :Jahr || '%' ) OR :Jahr IS NULL ) AND
( LOWER ( "Genre" ) LIKE LOWER ( :Genre || '%' ) OR :Genre IS NULL ) AND
( LOWER ( "CDTyp" ) LIKE LOWER ( :CDTyp || '%' ) OR :CDTyp IS NULL ) AND
( LOWER ( "Sammlung" ) LIKE LOWER ( :Sammlung || '%' ) OR :Sammlung IS NULL )