Kunzi: if ($ausgabe['kat']==1) Abfrage in SELECT integrieren

ich frage im Augenblick so meine mysql Datenbank ab:

$sql =  "select id,nr,name,kat FROM duma";

Bei der Ausgabe in einer while Schleife, frage ich da noch mit

if ($ausgabe['kat']==1) $ausgabe['kat']='Stadt';
elseif($ausgabe['kat']==2) $ausgabe['kat']='Stadtteil';

etc...

.......................... 1 - Stadt 2 - Stadtteil 3 - Ort 4 - Markt 5 - Gemeinde 6 - Weiler

...........................

ab bevor ich diese entdlich ausgebe. Kann ich meine "if, elseif" Abfrage nicht schon in meine SELCT Abfrage packen.

Danke, wenn sich mir einer erbarmt und weiterhilft!

Kunzi

  1. Hallo,

    ich frage im Augenblick so meine mysql Datenbank ab: $sql =  "select id,nr,name,kat FROM duma";

    Bei der Ausgabe in einer while Schleife, frage ich da noch mit

    if ($ausgabe['kat']==1) $ausgabe['kat']='Stadt';
    
    > elseif($ausgabe['kat']==2) $ausgabe['kat']='Stadtteil';
    
    

    etc...

    .......................... 1 - Stadt 2 - Stadtteil 3 - Ort 4 - Markt 5 - Gemeinde 6 - Weiler

    ...........................

    ab bevor ich diese entdlich ausgebe. Kann ich meine "if, elseif" Abfrage nicht schon in meine SELCT Abfrage packen.

    Im Prinzip ja. Das Zauberwort heißt JOIN. Du legst eine zweite Tabelle an, die nur die zwei Spalten 'kat' und 'klartext' hat, und füllst sie mit genau den sechs Paaren, die du oben aufgezählt hast.

    Bevor ich mich aber jetzt wieder ins mySQL-Handbuch stürze und im Eifer des Gefechts was Falsches verzapfe, soll bitte jemand anders den JOINt erklären, der damit vertrauter ist. Mein SQL-Wissen ist nämlich Stückwerk.

    Ciao,  Martin

    --
    Ich wollt', ich wär ein Teppich. Dann könnte ich morgens liegenbleiben. Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Tach!

      Kann ich meine "if, elseif" Abfrage nicht schon in meine SELCT Abfrage packen. Im Prinzip ja. Das Zauberwort heißt JOIN. [...] Bevor ich mich aber jetzt wieder ins mySQL-Handbuch stürze und im Eifer des Gefechts was Falsches verzapfe, soll bitte jemand anders den JOINt erklären, der damit vertrauter ist. Mein SQL-Wissen ist nämlich Stückwerk.

      Ich mach das nicht, das kann unser Wiki: Einführung in Joins

      Stattdessen bringe ich die Funktion ELT() ins Spiel. Die hat zwar den Nachteil, dass man bei einer Änderung den Code statt Daten ändern muss, dafür ist die Aufgabe jedoch sehr schnell erledigt.

      dedlfix.

      1. Moin

        Stattdessen bringe ich die Funktion ELT() ins Spiel. Die hat zwar den Nachteil, dass man bei einer Änderung den Code statt Daten ändern muss, dafür ist die Aufgabe jedoch sehr schnell erledigt.

        Oh... man lernt nie aus... eine weitere Möglichkeit... Hab ich persönlich noch nie gebraucht...

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    2. Moin

      Hallo,

      ich frage im Augenblick so meine mysql Datenbank ab: $sql =  "select id,nr,name,kat FROM duma";

      Bei der Ausgabe in einer while Schleife, frage ich da noch mit

      if ($ausgabe['kat']==1) $ausgabe['kat']='Stadt';
      
      > > elseif($ausgabe['kat']==2) $ausgabe['kat']='Stadtteil';
      
      

      etc...

      .......................... 1 - Stadt 2 - Stadtteil 3 - Ort 4 - Markt 5 - Gemeinde 6 - Weiler

      ...........................

      ab bevor ich diese entdlich ausgebe. Kann ich meine "if, elseif" Abfrage nicht schon in meine SELCT Abfrage packen.

      Im Prinzip ja. Das Zauberwort heißt JOIN. Du legst eine zweite Tabelle an, die nur die zwei Spalten 'kat' und 'klartext' hat, und füllst sie mit genau den sechs Paaren, die du oben aufgezählt hast.

      Eine Möglichkeit... es geht aber auch anders... Im MySQL kann man mit CASE arbeiten oder IF arbeiten....

      z.B.:

      
      SELECT  id,nr,name,CASE kat
            WHEN 1 THEN 'Stadt'
            WHEN 2 THEN 'Stadtteil'
            WHEN 3 THEN 'Ort'
            WHEN 4 THEN 'Markt'
            WHEN 5 THEN 'Gemeinde'
            WHEN 6 THEN 'Weiler'
            ELSE 'unbekannt'
          END kat FROM duma
      
      
      

      Besser ist natürlich die Namen der Kategorien in eine eigene Tabelle zu bringen und dann via Kreuzprodukt oder eben auch JOIN zusammen zu bringen angenommen deine Tabelle für die Kategorien heißt 'kategorie' und hat die Felder id und name. Dann könntes so aussehen:

      
      SELECT  duma.id, nr, name, duma.kat, kategorie.name
           FROM duma, kategorie WHERE katategorie.id = duma.kat
      
      
      

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. Hallo

        Als Ergänzung:

        ich frage im Augenblick so meine mysql Datenbank ab: $sql =  "select id,nr,name,kat FROM duma";

        Bei der Ausgabe in einer while Schleife, frage ich da noch mit

        if ($ausgabe['kat']==1) $ausgabe['kat']='Stadt';
        
        > > > elseif($ausgabe['kat']==2) $ausgabe['kat']='Stadtteil';
        
        

        etc...

        .......................... 1 - Stadt 2 - Stadtteil 3 - Ort 4 - Markt 5 - Gemeinde 6 - Weiler

        ...........................

        ab bevor ich diese entdlich ausgebe.

        Wenn die obige Liste mehr oder minder feststehend ist, lässt sich die angebotene Lösung mit einem JOIN noch bequemer bzw. leserlicher handhaben, wenn man diesen nicht live bei der Abfrage durchführt, sondern in einem View.

        Dazu würde ich den Namen der Gemeindestruktur als zusätzliches Feld neben die dazugehörige ID in die Sicht, die ansonsten der Tabelle der Orte entspricht, packen.

        Als virtuelle Tabelle ist der View stets vorhanden und die durchzuführende Abfrage ist flach und damit leserlicher, da sie nur diese eine (virtuelle) Tabelle abfragt. Zudem muss eine Änderung an der Struktur, so sie denn notwendig wird, nur an einer Stelle erfolgen. Das macht sich besonders dann bezahlt, wenn ein gleichartiger Zugriff auf die Daten von mehreren Stellen aus erfolgen soll.

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, "Wachen! Wachen!" ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}