Mike: SQL Abfrage, wenn Zelle empty dann ''kein Inhalt"

select id,titel,info_text1,info_text2,infor_text3 from table

ich möchte meine Tabelle so auslesen, das wenn kein Inhalt in einer Zelle ist, diese automatisch bei der SELECT Abfrage eine Inhalt bekommt wie : "Kein Inhalt vorhanden"

das ist mein Ansatz, der aber leider nicht zum gewünschten Ergebnis führt


select id,titel,info_text1,info_text2,IFNULL(infor_text3,'Kein Inhalt vorhanden') from table
  1. Tach!

    select id,titel,info_text1,info_text2,infor_text3 from table
    

    ich möchte meine Tabelle so auslesen, das wenn kein Inhalt in einer Zelle ist, diese automatisch bei der SELECT Abfrage eine Inhalt bekommt wie : "Kein Inhalt vorhanden"

    Definier mal exakt, was "kein Inhalt" heißt. Auch "kein Inhalt" wird durch irgendetwas konkretes repräsentiert.

    das ist mein Ansatz, der aber leider nicht zum gewünschten Ergebnis führt

    select id,titel,info_text1,info_text2,IFNULL(infor_text3,'Kein Inhalt vorhanden') from table
    

    Sehr bedauerlich. Und nun? Niemand kennt deine Daten, ob da auch wirklich NULL drinsteht und nicht vielleicht ein Leerstring oder was anderes.

    dedlfix.

    1. es sind reine Textfelder, in denen ab und zu keine Informationen sind. wenn das so ist soll, das Feld mit " Kein Inhalt vorhanden" gefüllt werden

      1. Hallo Mike,

        es sind reine Textfelder, in denen ab und zu keine Informationen sind. wenn das so ist soll, das Feld mit " Kein Inhalt vorhanden" gefüllt werden

        Aus Dedlfix' Antwort: „Niemand kennt deine Daten, ob da auch wirklich NULL drinsteht und nicht vielleicht ein Leerstring“ (Hervorhebungen von mir)

        Bis demnächst
        Matthias

        --
        Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
        1. @@Matthias Apsel

          es sind reine Textfelder, in denen ab und zu keine Informationen sind. wenn das so ist soll, das Feld mit " Kein Inhalt vorhanden" gefüllt werden

          Aus Dedlfix' Antwort: „Niemand kennt deine Daten, ob da auch wirklich NULL drinsteht und nicht vielleicht ein Leerstring“ (Hervorhebungen von mir)

          Was auch immer keine Daten repräsentiert – ob nun NULL oder "" – wenn ich Mike richtig verstehe, will er dies durch den String „kein Inhalt vorhanden“ ersetzen, also leere Datenfelder mit Inhalt füllen.

          Es sollte einleuchten, dass dies unsinnig ist. Weil eben keine Daten am besten durch NULL oder "" repräsentiert werden, nicht durch irgendwelche Daten.

          Vergleiche mit NULL bzw. "" sind einfacher (und fehlerunanfälliger!) zu implementieren als Vergleiche mit Strings wie "kein Inhalt vorhanden"

          Die Repräsentierung in der Datenbank sollte agnostisch von der späteren Verwendung erfolgen. Wenn für den Nutzer statt eines leeren Tabellenfeldes „kein Inhalt vorhanden“ angezeigt werden soll, dann hat dies nach dem Auslesen aus der Datenbank zu erfolgen. Sowas wie <?php echo !empty($foo) ? $foo : 'kein Inhalt vorhanden'; ?>.

          Oder man sieht das gleich als Styling-Sache und macht das mit CSS: td:empty::after { content: "kein Inhalt vorhanden" }. (Dann darf aber auch kein Whitespace in <td></td> sein.) Dann kann man auch gleich „kein Inhalt vorhanden“ bspw. eine andere Farbe (bspw. grau) geben.

          LLAP 🖖

          --
          „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
          „Hat auf dem Forum herumgelungert …“
          (Wachen in Asterix 36: Der Papyrus des Cäsar)
          1. Hallo,

            [...] also leere Datenfelder mit Inhalt füllen.

            Es sollte einleuchten, dass dies unsinnig ist.

            auf jeden Fall wenn man das bereits an der Quelle tut, anstatt am Ende der Verarbeitungskette.

            Die Repräsentierung in der Datenbank sollte agnostisch von der späteren Verwendung erfolgen. Wenn für den Nutzer statt eines leeren Tabellenfeldes „kein Inhalt vorhanden“ angezeigt werden soll, dann ...

            ... fragt sich der geneigte Leser auch, was das soll. Das ist so überflüssig wie die Marotte des Windows-Explorers, in ein leeres Verzeichnis-Listing den Text "Keine Dateien zum Anzeigen" einzublenden, anstatt die Liste einfach leer zu lassen (so wie es in früheren Windows-Versionen bis mindestns XP war).

            Genauso sinnlos ist auch, wenn in irgendwelchen Normen z.B. im Vorspann eine Leerseite ist, auf der in der Mitte das Wort "Leerseite" prangt (oder im Englischen auch gern "This page intentionally left blank"). Zumal die Aussage in diesem Moment sogar falsch wird.

            So long,
             Martin

            1. @@Der Martin

              Wenn für den Nutzer statt eines leeren Tabellenfeldes „kein Inhalt vorhanden“ angezeigt werden soll, dann ...

              ... fragt sich der geneigte Leser auch, was das soll. Das ist so überflüssig

              Ist es? Bei einer Webanwendung ist „kein Inhalt vorhanden“ schon eine andere Aussage als „kann gerade nicht in der Datenbank nachsehen, ob Inhalt vorhanden ist“ (bspw. bei keiner/schlechter Netzverbindung).

              LLAP 🖖

              --
              „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
              „Hat auf dem Forum herumgelungert …“
              (Wachen in Asterix 36: Der Papyrus des Cäsar)
              1. Hallo,

                Wenn für den Nutzer statt eines leeren Tabellenfeldes „kein Inhalt vorhanden“ angezeigt werden soll, dann ...

                ... fragt sich der geneigte Leser auch, was das soll. Das ist so überflüssig

                Ist es?

                IMO ja.

                Bei einer Webanwendung ist „kein Inhalt vorhanden“ schon eine andere Aussage als „kann gerade nicht in der Datenbank nachsehen, ob Inhalt vorhanden ist“ (bspw. bei keiner/schlechter Netzverbindung).

                Dann ist aber gerade der Fall "kann Datenbank nicht erreichen" derjenige, der eines Hinweises bedarf, weil es ein (vorhersehbarer?) Fehlerfall ist. Ein leeres Feld oder eine leere Liste ist aber in vielen Anwendungen ein Fall, der regulär auftreten kann. Deswegen würde ich den Fall dann auch genau so darstellen wollen - als leeres Feld bzw. leere Liste.

                Anders sieht es aus, wenn der Fall "leeres Feld" von der Logik oder Datenkonsistenz her eigentlich nicht auftreten dürfte, also ein logischer Fehler ist (z.B. wenn der Kunde im Webshop angegeben hat, dass er per Kreditkarte zahlen möchte, aber keine Kreditkartennummer hinterlegt ist). Dann bitte gern mit deutlichem Hinweis.

                So long,
                 Martin

          2. Hallo

            es sind reine Textfelder, in denen ab und zu keine Informationen sind. wenn das so ist soll, das Feld mit " Kein Inhalt vorhanden" gefüllt werden

            Aus Dedlfix' Antwort: „Niemand kennt deine Daten, ob da auch wirklich NULL drinsteht und nicht vielleicht ein Leerstring“ (Hervorhebungen von mir)

            Was auch immer keine Daten repräsentiert – ob nun NULL oder "" – wenn ich Mike richtig verstehe, will er dies durch den String „kein Inhalt vorhanden“ ersetzen, also leere Datenfelder mit Inhalt füllen.

            Es sollte einleuchten, dass dies unsinnig ist. Weil eben keine Daten am besten durch NULL oder "" repräsentiert werden, nicht durch irgendwelche Daten.

            In Mikes Posting steht (wenn ich ihn richtig verstehe), dass er leere Tabellenfelder in der Ausgabe der Daten durch Platzhaltertexte ersetzen will. Da steht nichts von zu ersetzenden Nicht-Inhalten in den Datenbankfeldern. Dort bleibt der Inhalt NULL oder "" (oder was da auch immer tatsächlich drin steht).

            Solange Mike aber nicht damit herausrückt, was in den Feldern ist, kann hier niemand sagen, wie er den Inhalt detektieren kann, um ihn durch die Platzhalter zu ersetzen.

            Oder man sieht das gleich als Styling-Sache und macht das mit CSS: td:empty::after { content: "kein Inhalt vorhanden" }. (Dann darf aber auch kein Whitespace in <td></td> sein.) Dann kann man auch gleich „kein Inhalt vorhanden“ bspw. eine andere Farbe (bspw. grau) geben.

            Das ist 'ne elegante Möglichkeit für die reine Ausgabe. Wenn die Daten irgendwohin kopiert werden können sollen (copy'n'paste), hätte ich aber schon lieber echten Text statt der Pseudoelemente.

            Tschö, Auge

            --
            Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
            Terry Pratchett, „Gevatter Tod“
            1. @@Auge

              In Mikes Posting steht (wenn ich ihn richtig verstehe), dass er leere Tabellenfelder in der Ausgabe der Daten durch Platzhaltertexte ersetzen will. Da steht nichts von zu ersetzenden Nicht-Inhalten in den Datenbankfeldern. Dort bleibt der Inhalt NULL oder "" (oder was da auch immer tatsächlich drin steht).

              „ich möchte meine Tabelle so auslesen, das wenn kein Inhalt in einer Zelle ist, diese automatisch bei der SELECT Abfrage eine Inhalt bekommt“

              „es sind reine Textfelder, in denen ab und zu keine Informationen sind. wenn das so ist soll, das Feld mit " Kein Inhalt vorhanden" gefüllt werden“

              Beides hört sich für mich nach Änderung des Inhalts der Zelle in der Datenbank an. Das kann aber auch Mikes ungenauer Ausdrucksweise geschuldet sein. Hoffen wir mal für Mike, dass du recht hast.

              Wenn die Daten irgendwohin kopiert werden können sollen (copy'n'paste), hätte ich aber schon lieber echten Text statt der Pseudoelemente.

              Dann steht man aber evtl. wieder vor dem Problem, den „echten“ Text „kein Inhalt vorhanden“ von echtem Text (d.h. wirklichen Daten) unterscheiden zu müssen. Vielleicht will man bei C&P doch lieber nichts umkopieren als den Hinweis auf nichts.

              LLAP 🖖

              --
              „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
              „Hat auf dem Forum herumgelungert …“
              (Wachen in Asterix 36: Der Papyrus des Cäsar)
              1. Hallo

                In Mikes Posting steht (wenn ich ihn richtig verstehe), dass er leere Tabellenfelder in der Ausgabe der Daten durch Platzhaltertexte ersetzen will. Da steht nichts von zu ersetzenden Nicht-Inhalten in den Datenbankfeldern. Dort bleibt der Inhalt NULL oder "" (oder was da auch immer tatsächlich drin steht).

                „ich möchte meine Tabelle so auslesen, das wenn kein Inhalt in einer Zelle ist, diese automatisch bei der SELECT Abfrage eine Inhalt bekommt“

                Ich sehe hier „auslesen“ und „bei der SELECT Abfrage eine Inhalt bekommt“ als die relevanten Hinweise. Natürlich kann auch ich falsch liegen.

                Wenn die Daten irgendwohin kopiert werden können sollen (copy'n'paste), hätte ich aber schon lieber echten Text statt der Pseudoelemente.

                Dann steht man aber evtl. wieder vor dem Problem, den „echten“ Text „kein Inhalt vorhanden“ von echtem Text (d.h. wirklichen Daten) unterscheiden zu müssen. Vielleicht will man bei C&P doch lieber nichts umkopieren als den Hinweis auf nichts.

                Das kommt auf den Verwendungszweck der hypothetisch zu kopierenden Daten an. Für eine maschinelle Weiterverarbeitung ist die Ersetzung (bestenfalls) hinderlich. Bei einer Aufbereitung für ein menschliches Publikum kann sie Unklarheiten und Nachfragen (Warum steht denn da nichts?) vermeiden/beseitigen.

                Naja, warten wir ab, ob da noch was kommt.

                Tschö, Auge

                --
                Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
                Terry Pratchett, „Gevatter Tod“
      2. Tach!

        es sind reine Textfelder, in denen ab und zu keine Informationen sind. wenn das so ist soll, das Feld mit " Kein Inhalt vorhanden" gefüllt werden

        Also, wenn ich eine Tabelle erstelle habe ich keine Auswahlmöglichkeit "reines Textfeld". Bei mir sehe ich Datentypen à la VARCHAR oder MEDIUMTEXT. Und ich muss mit NULL oder NOT NULL angeben, ob überhaupt NULL-Werte erlaubt sind. Zudem muss ich beim Eintragen entscheiden, ob ich NULL oder einen Leerstring eintrage. Das hat natürlich Auswirkungen auf die Abfragbarkeit. Einen Leerstring kann man nicht mit IFNULL() ermitteln.

        Und nun werd mal bitte konkret und schreib exakte Angaben und keine umgangssprachlichen Umschreibungen! Sonst kommen wir hier nicht weiter.

        dedlfix.