Margrith: Spaltenname

Hallo

Ich habe eine Tabelle (Muster) mit sagen wir mal 3 Spalten:

  • id
  • zähler1
  • zähler2

--------------------------
|id  | zähler1 | zähler2 |
--------------------------
|1   |    0    |    25  |
|2   |    0    |     0  |
|2   |    0    |     3  |
--------------------------

Ist es möglich, nur jene Spaltennamen auszulesen, bei denen mindestes einmal ein Wert drin steht?

-> in diesem Beispiel würde dann "zähler2" ausgegeben.

Auf der Suche der Lösung bin ich immer wieder auf den Befehl "describe" gestossen. Der gibt aber immer alle Spaltennamen aus. Darum meine Frage: Ist das was ich will überhaupt möglich?

Bin für jeden Hinweis sehr dankbar!

Liebe Grüsse
Margrith

  1. Hi Margrith,

    Ist es möglich, nur jene Spaltennamen auszulesen, bei denen mindestes einmal ein Wert drin steht?

    Was verstehst du jetzt unter einem Wert? 0 wird vom Datenbanksystem durchaus auch als Wert angesehen - Felder die keine Werte enthalten sind auf NULL gesetzt.

    -> in diesem Beispiel würde dann "zähler2" ausgegeben.

    Warum verwendest du bei deinem SELECT nicht einfach eine entsprechende WHERE Klausel, z.B. so:

    WHERE zähler1 <> 0 AND zähler2 <> 0

    Damit würdest du nur Datensätze bekommen bei denen in der Spalte zähler1 und in der Spalte zähler2 nicht der Wert 0 steht.

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Crypt::PasswdMD5 jetzt auch in PHP
    Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet! (Anita Berres)
    1. Hi Dennis!

      Was verstehst du jetzt unter einem Wert? 0 wird vom Datenbanksystem durchaus auch als Wert angesehen - Felder die keine Werte enthalten sind auf NULL gesetzt.

      Du hast natürlich Recht. 0 ist ebenfalls ein Wert. Sagen wir einfach, der Wert muss höher als 0 sein.

      Warum verwendest du bei deinem SELECT nicht einfach eine entsprechende WHERE Klausel, z.B. so:

      WHERE zähler1 <> 0 AND zähler2 <> 0

      Ich brauche den Spaltennamen jener Spalte, die auch einen Wert (höher als 0) hat. Wieviele Datensätze mit dem Kriterium übereinstimmen muss ich nicht wissen. Nur den Spaltennamen!

      Grüsse
      Margrith

      1. Hi Margrith,

        Ich brauche den Spaltennamen jener Spalte, die auch einen Wert (höher als 0) hat. Wieviele Datensätze mit dem Kriterium übereinstimmen muss ich nicht wissen. Nur den Spaltennamen!

        Sorry, dann habe ich dich falsch verstanden - nun ja, mit Describe wirst du da vermutlich nicht großartig weiterkommen, da du hierfür den Spaltennamen wissen musst und dann weitere Informationen zu der Spalte (Typ usw.) bekommen kannst, siehe auch MySQL Handbuch.

        Hast du das Handbuch schon mal durchsucht? Ich fürchte aber, dass es etwas entsprechendes nicht geben wird, da die Tabellenstruktur in einer Programmierung immer als bekannt vorrausgesetzt/vorrauszusetzen ist. Sprich: Du musst also wissen, wie die Spalten-Namen lauten.

        Natürlich könntest du mit SELECT * (ich hoffe du weißt, dass das nicht gut ist) alle Spalten auslesen und mit der PHP Funktion mysql_fetch_assoc() die Informationen in ein Array dieser Struktur laden:

        spalten_name => spalten_wert

        Das Array ließe sich natürlich mit foreach durchgehen, in $key hast du dann den Spaltennamen, den du haben willst, sofern $value > 0 ist. Wäre aber wohl ein ziemlich arger Würgaround ...

        MfG, Dennis.

        1. Hallo Dennis,

          Hast du das Handbuch schon mal durchsucht? Ich fürchte aber, dass es etwas entsprechendes nicht geben wird, da die Tabellenstruktur in einer Programmierung immer als bekannt vorrausgesetzt/vorrauszusetzen ist. Sprich: Du musst also wissen, wie die Spalten-Namen lauten.

          ich habe Margrith so verstanden, dass die Spaltennamen bekannt sind.
          Das Hauptproblem sehe ich darin, dass für "kein Wert" etwas anderes angenommen wird als bei DBMS üblich, d.h. die Zahl 0 steht für kein Wert, somit versagt die Funktion COUNT(), die ansonsten wunderbar das Gewünschte zurückliefern würde.

          Andererseits könnte man mit UNION die Einzelabfragen zusammensetzen, in etwa in der Form:

            
          SELECT  
            'feld1' AS Spalte,  
            COUNT(feld_1) AS Anzahl  
            WHERE feld_1 > 0  
          UNION  
          SELECT  
            'feld2',  
            COUNT(feld_2)  
            WHERE feld_2 > 0  
          UNION ...  
          
          

          Falls das DBMS UNION nicht unterstützt, dann halt in der API (hier offensichtlich PHP) in einer Schleife die Einzelabfragen nacheinander absetzen.

          Freundliche Grüße

          Vinzenz

      2. Moin!

        Ich brauche den Spaltennamen jener Spalte, die auch einen Wert (höher als 0) hat. Wieviele Datensätze mit dem Kriterium übereinstimmen muss ich nicht wissen. Nur den Spaltennamen!

        Dein Problem klingt sehr ungewöhnlich, da normalerweise die Tabellenspalten feststehende Konstanten sind und man eigentlich nur die gespeicherten Daten abfragt - je nach Anforderung nur die mit entsprechenden Kriterien.

        Vielleicht kannst du deine Situation mal etwas ausführlicher schildern. Wozu genau brauchst du den Spaltennamen? Was ist insgesamt die zu erfüllende Aufgabe?

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
  2. Hallo Margrith,

    was hat Dein Problem zunächst mit PHP zu tun? Das verstehe ich nicht.

    Auf der Suche der Lösung bin ich immer wieder auf den Befehl "describe" gestossen.

    Daraus folgere ich, dass Dein Datenbankmanagementsystem (DBMS) MySQL ist. Stimmt das? Wenn ja, welche Version? Wenn nein, welches DBMS verwendest Du?

    Der gibt aber immer alle Spaltennamen aus. Darum meine Frage: Ist das was ich will überhaupt möglich?

    Prinzipiell ja. Es ist allerdings eine Frage des DBMS, wie einfach oder kompliziert das ist.

    Freundliche Grüße

    Vinzenz