Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Query soll frei suchen falls Variable nicht belegt

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Michi_R, 28 Mai 2013.

  1. Michi_R

    Michi_R Fleissiger Benutzer

    Hallo,

    ich habe in php ein eingabefeld. Gibt der Nutzer dort einen paramter ein, soll mein query nach diesem parameter filtern
    also z.b.

    Code:
    select * from schueler where note=1
    //falls im Suchfeld "note" die 1 eingegeben wurde.

    Gibt der Benutzer im Suchfeld "note" jedoch nichts ein, sollen alle Schüler angezeigt werden (also unabhängig welchen noten sie haben).

    Wenn ich meinen query, der aktuell so aussieht:

    Code:
    "select * from schueler where note=".$note
    lasse, dann gibt er natürlich bei leerem note-Feld nichts aus, weil er schueler sucht, bei denen in der Datenbank bei note kein wert eingetragen ist.

    Wie kann man das umsetzen?

    Klar könnte man eine if abfrage bauen und abhängig vom eingabeparameter den einen oder den anderen query verwenden. Aber geht da snicht schöner?

    Danke!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du kennst den Weg. Entscheide in PHP, nach was Du suchst. Ach ja: select * ist keine gute Idee.
     
  3. ukulele

    ukulele Datenbank-Guru

    Vieleicht so...
    Code:
    SELECT    *
    FROM    schueler
    WHERE (    note = .$note
    OR        .$note = ''
    OR        .$note IS NULL )
    AND    (    name = .$name
    OR        .$name = ''
    OR        .$name IS NULL )
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Das endet möglicherweise bzw. sehr wahrscheinlich in einem Syntaxfehler.
     
  5. ukulele

    ukulele Datenbank-Guru

    Also MSSQL nimmt das an, natürlich mit SQL Variablen.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Er hantiert mit PHP, wenn $note leer ist kommt "... where note = or = '' ..." raus, das müffelt...
     
  7. Michi_R

    Michi_R Fleissiger Benutzer

    Richtig.
    Außerdem gibts keine Schuler, die bei note nichts eingetragen haben.
    Genau das selbe hab ich beim Feld datum. Gebe ich eins an, soll er nur die mit entsprechendem Datum finden, wenn das feld leer bleibt, soll er das datum bei der abfrage nicht brücksichtigen.
    Wie setzt man denn sowas um? evtl stichworte zum googlen würden mir auch reichen. Weiß nur garnicht wie ich anfangen soll.
     
  8. Walter

    Walter Administrator Mitarbeiter

    Warum nicht mit einem if in PHP lösen?
    Wozu die Datenbank mit etwas quälen das man einfacher in der Applikation lösen kann?
     
    akretschmer gefällt das.
  9. Michi_R

    Michi_R Fleissiger Benutzer

    Naja, ich habe 3 Filter, die jeweils eben einen wert bei der eingabe bekommen können oder nicht. 3x3 macht schon 9 if abfragen, z.b. für alle 3 felder leer, feld 1 leer, feld 2 und 3 mit paramter, feld 1 und 2 leer, feld 3 mit paramter usw usf.
     
  10. Michi_R

    Michi_R Fleissiger Benutzer

    ...oder ich lass den abfragestring einfach von php zusammensetzen. mit substr. replace dann den passenden teil einfügen. das könnte passen;)
     
  11. Michi_R

    Michi_R Fleissiger Benutzer

    Gibt es denn kein Zeichen, dass für sql sowas wie bliebig heißt?

    Also entweder ich habe den fall note=1, dann heißt der query: ...where note=1
    oder ich hab keine eingabe, dann würde ich standartmäßig z.b. auf % setzen, aber mit where note=% funktioniert ja leide rnicht. Gibts statt dem % kein Zeichen/Kürzel, dass beliebig bedeutet?
     
  12. ukulele

    ukulele Datenbank-Guru

    Das wäre dann im Prinzip EXISTS
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden