Paul: if, elseif, else per SQL

Moin,
ich möchte eine Access 2007 DB abfragen. Folgender Code läuft:

if ($_ID != '')        $Ergebnis = odbc_exec($_CONN, "SELECT * FROM Produkte WHERE ID = $_ID");  
else if ($_NAME != '') $Ergebnis = odbc_exec($_CONN, "SELECT * FROM Produkte WHERE Name = $_NAME");  
else                   $Ergebnis = odbc_exec($_CONN, "SELECT * FROM Produkte WHERE Nummer = $_NR");

Falls eine ID gegeben ist, benutze diese. Falls keine ID aber ein Name vorhanden ist, benutze diesen. Andernfalls benutze die Nummer.
Gibt es eine SQL Anweisung die mir das if elseif else erspart? Und wenn ja, ist das auch sinnvoll das per SQL anstatt per PHP zu machen?

Paul

  1. moin,

    Gibt es eine SQL Anweisung die mir das if elseif else erspart? Und wenn ja, ist das auch sinnvoll das per SQL anstatt per PHP zu machen?

    1. ja
    2. bedinkt mit tendenz zu nein

    Ilja

    1. Hallo Ilja,

      1. ja

      Kannst du bitte interessehalber diese Möglichkeit kurz beschreiben?
      Danke schön

      ciao
      romy

      1. moin,

        Kannst du bitte interessehalber diese Möglichkeit kurz beschreiben?

        es gibt dafür zwei wege (vielleicht auch noch mehrere), dynamisches sql wäre die eine, was aber im prinzip dem entspricht, was er in php schon macht.

        die andere möglichkeit ist ein geschicktes sql statement, zum beispiel mit UNION, quasi alle drei abfragen aneinander "geklebt" und dort wo der Parameter NULL ist gibt es in der jeweiligen einzelabfrage eben keine ergebnisse. sicher gibt es auch andere möglichkeiten mit sql, OR ist ja schon gennant worden, wobei ich diesen weg ein wenig kritisch sehe, da dort doppelte datensätze nicht rausgefiltert werden. UNION hingegen könnte man auch in einem kosntrukt einsetzen, wo man mehrere parameter angeben kann und er eben alle relevanten treffer ausgibt, aber auch keine dubletten, falls derselbe datensatz durch mehrere parameter selektiert wird.

        Ilja

  2. Gibt es eine SQL Anweisung die mir das if elseif else erspart?

    U.U. mit OR?

    dbc_exec($_CONN, "SELECT * FROM Produkte WHERE ID = $_ID OR Name = $_NAME OR Nummer = $_NR");  
    
    

    Struppi.

    1. Gibt es eine SQL Anweisung die mir das if elseif else erspart?

      U.U. mit OR?

      dbc_exec($_CONN, "SELECT * FROM Produkte WHERE ID = $_ID OR Name = $_NAME OR Nummer = $_NR");

      
      >   
      > Struppi.  
        
      Das müsste klappen. Danke
      
    2. Hallo Struppi,

      Gibt es eine SQL Anweisung die mir das if elseif else erspart?
      U.U. mit OR?

      dbc_exec($_CONN, "SELECT * FROM Produkte WHERE ID = $_ID OR Name = $_NAME OR Nummer = $_NR");

      Aber nur bei Feldern, die von Anführungszeichen umgeben angegeben werden müssen, oder? Sonst steht ja im Statement ...ID= OR... (Ok, hier in seinem Fall scheint es ja so zu sein)  
        
      ciao  
      romy
      
      -- 
      [Frauenfussball SV 09 Hofheim](http://frauenfussballsv09hofheim.de)  
        
      [Piraten ahoi](http://www.piratenpartei.de/navigation/politik/unsere-ziele)
      
      1. Gibt es eine SQL Anweisung die mir das if elseif else erspart?
        U.U. mit OR?

        dbc_exec($_CONN, "SELECT * FROM Produkte WHERE ID = $_ID OR Name = $_NAME OR Nummer = $_NR");

        
        > Aber nur bei Feldern, die von Anführungszeichen umgeben angegeben werden müssen, oder? Sonst steht ja im Statement ...ID= OR... (Ok, hier in seinem Fall scheint es ja so zu sein)  
          
        Ich hatte das nur kopiert, ob letztlich die Syntax i.O. ist, kann ich nicht beurteilen. Dazu müßte man Wissen, was in den Variabeln steht.  
          
        Und ob die Abfrage das richtige Ergebniss liefert, hängt ein bisschen davon ab, wie die Daten strukturiert sind.  
          
        Struppi.
        
  3. Hi,

    if ($_ID != '')

    Es ist in PHP zwar nicht verboten, eigene Variablennamen mit einem Unterstrich beginnen zu lassen, aber ich persönlich würde meine eigenen Variablen NICHT mit Unterstrich beginnen lassen.
    Ich würde die Namen mit Unterstrich am Anfang für PHP reserviert lassen ($_GET, $_POST, ... - wer weiß, was da in zukünftigen PHP-Versionen noch alles definiert wird).

    $Ergebnis = odbc_exec($_CONN, "SELECT * FROM Produkte WHERE ID = $_ID");
    else if ($_NAME != '') $Ergebnis = odbc_exec($_CONN, "SELECT * FROM Produkte WHERE Name = $_NAME");
    else                   $Ergebnis = odbc_exec($_CONN, "SELECT * FROM Produkte WHERE Nummer = $_NR");[/code]

    die 3 Bedingungen in der gewünschten Reihenfolge mit OR verknüpft sollte das gewünschte Ergebnis bringen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.