SELECT mit Filtern

Maximus

Erfahrenes Mitglied
Hallo,

ich suche nach einer Lösung für folgendes Probleme:

1.) Eine Tabelle enthält die Felder Spieltag, Heim-Team und Gast-Team.
Mittels 3 DropDownBoxen möchte ich jetzt die die Zeilen der Tabelle filtern:
SELECT ..... WHERE ...... AND Heim-Team = @heimteam AND Spieltag = @spieltag
AND Gast-Team = @gastteam.
Problem dabei: Ich muss für ALLE 3 Parameter Werte übergeben. Die ganze
SELECT-Anweisung funktioniert nicht mehr, sobald ein Wert leer ist.
Es kann aber sein, dass der User nicht alle drei Filter setzen möchte. Wie
kann ich das Problem umgehen?

2.) Ich füge der DropDownlist Spieleage nachher noch ein Item "Alle Spiele"
hinzu. Mit welchem Wert muss ich hier dem DataValue übergeben, damit in der
obigen SELECT-Anweisung ALLE Spieltage berücksichtigt werden?

Im voraus danke für Eure Hilfe.

Gruß
Maximus
 
Du baust dir am besten deine Abfrage nach den ausgefüllten Daten zusammen. Wurde ein Feld nicht befüllt, schränkst du auch nicht darauf ein. Wenn "Alle" ausgewählt wurde, brauchst du dann eigentlich auch keine Einschränkung darauf machen, da ohnehin alle Daten abgefragt werdne, ausser du hast noch eine weitere Einschränkung darauf.
 
Hallo Norbert,

danke für den Tip.
Kannst Du mir ein Code-Beispiel geben, wie ich das umsetzen kann?
Es wird doch sicher nur im SELECT-Command so umgesetzt, oder?
Hier nochmal mein jetziger SELECT:

PHP:
ALTER PROCEDURE dbo.ErmittelSpiele 
     
    ( 
        @filter_spieltag int, 
        @filter_heimteam int, 
        @filter_gastteam int 
    ) 
     
AS 
            SELECT A.spiel_id, A.spieltag_id, B.mannschafts_name, C.mannschafts_name, D.spieltag_datum, D.spieltag_name, D.spieltag_id 
            FROM Spiele A, Mannschaften B, Mannschaften C, Spieltage D 
            WHERE A.mannschaft_a = B.mannschafts_id AND A.mannschaft_b = C.mannschafts_id AND A.spieltag_id = D.spieltag_id AND (@filter_spieltag IS NULL OR D.spieltag_id=@filter_spieltag) AND (@filter_heimteam IS NULL OR B.mannschafts_id=@filter_heimteam) AND (@filter_gastteam IS NULL OR C.mannschafts_id=@filter_gastteam);

Danke für Deine Hilfe.
 
Du brauchst dazu mehrere SQL Statements, oder du baust es dynamisch zusammen. Du hast es ja als Stored Procedure drinnen, ergo brauchst du mehrere davon. Das was du nämlich jetzt auf Null setzt, sollst du weglassen.
 
Das würde bedeuten ich bräuchte 9 Stored Procedures.
Ist das sinnvoll? Gibt es keine einfachere Lösung?
Wie wird so dynamisch gelöst?
Sorry, aber bin neu in der Datenbankprogrammierung.
 
Problem gelöst:

Falls es jemand interessiert:

Man muss bei dem SqlDataSource die Eigenschaft CancelSelectOnNullParameter auf FALSE setzen.

Und schon läuft alles wie geschmiert!

Trotzdem vielen Dank für Eure Hilfe.
Tolles Forum! Ihr werdet mich so schnell nicht wieder los! ;)

Gruss
Maximus
 
Oh, diese Eigenschaft kannte ich nicht, liegt wohl daran, dass ich nicht mit DataAdapter und Co arbeite. Aber gut zu wissen.
 
Hi,

habe das gleiche Problem. Leider komme ich noch nicht damit klar. Kann vielleicht jemand ein kleines Code-Beispiel posten?

Vielen Dank im voraus

Gruß Thorsten
 
Zurück