Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL wenn Spalte leer ist ignorieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL wenn Spalte leer ist ignorieren

    Hallo,

    ich habe gerade ein Problem bekommen:
    Es gibt eine Tabelle mit 3 Reihen: ID, Username, pd
    Ich möchte alle Einträge auslesen und anzeigen in einer Tabelle.
    Die Tabelle konnte ich schon erstellen, aber das Problem liegt bei Select:
    Es sollen nur die Einträge angezeigt werden beidenen auch pd definiert ist!
    Momentan werden in der Tabelle auch die Spalten angezeigt beidenen pd leer ist.

    PHP-Code:
    $ergebnis "SELECT * FROM `data` WHERE `pd` IS NOT NULL"
    Das kam mir so in den Sinn... Hab damit aber noch nie gearbeitet und Google gibt mir nur Haufenweise Threads die damit nichts zu tun haben.

    Wie muss $ergebnis aussehen?

    mfg Marc

  • #2
    Zitat von Marc20 Beitrag anzeigen

    PHP-Code:
    $ergebnis "SELECT * FROM `data` WHERE `pd` IS NOT NULL"
    Das kam mir so in den Sinn... Hab damit aber noch nie gearbeitet und Google gibt mir nur Haufenweise Threads die damit nichts zu tun haben.

    Wie muss $ergebnis aussehen?

    mfg Marc
    Wie $ergebnis aussehen soll hängt von Deinen Daten und der Abfrage ab. Beachte aber: leer ist oft != NULL, wenn Du mit Strings arbeitest. Zumindest im Verständniss vieler.

    Andreas

    Kommentar


    • #3
      MySQL wenn Spalte leer ist ignorieren

      Hallo!

      Versuch´s mal damit:
      PHP-Code:
      SELECT
            ID
      ,
            
      Username,
            
      pd
      FROM
            data
      WHERE
            not isnull
      (pd); 

      Kommentar


      • #4
        Code:
        WHERE pd IS NOT NULL AND pd != ''

        Kommentar


        • #5
          MySQL wenn Spalte leer ist ignorieren

          Code:
          WHERE pd IS NOT NULL AND pd != ''
          Stimmt...wenn nicht leer ist, hab jetzt nur an NULL gedacht.

          @Chris
          Was aber, wenn pd mit " " gefüllt ist. Dann ist es ja eigentlich auch "leer". In dem Sinne, dass kein sichtbarer Inhalt vorhanden ist. Müsste man dann nicht
          Code:
          WHERE not isnull(pd) AND pd > 0
          schreiben? Oder wie geht das?

          Kommentar


          • #6
            Code:
            TRIM(pd) != ''
            Ich trimme den Inhalt aber sowieso meistens, bevor ich ihn in die DB schreibe, damit ich bei den Queries nicht alle Varianten durchtesten muss.

            Kommentar


            • #7
              Es gibt eine Tabelle mit 3 Reihen: ID, Username, pd
              beidenen auch pd definiert ist!
              Bitte achte auf sprachliche Korrektheit! ID, Username, pd sind Spalten, keine Reihen. „definiert“ heißt nicht Nicht-Leer. Wenn Du Nicht-Leer meinst, dann schreib bitte auch Nicht-Leer.

              Was aber, wenn pd mit " " gefüllt ist. Dann ist es ja eigentlich auch "leer".
              Das halte ich doch für stark diskussionswürdig.

              Kommentar


              • #8
                MySQL wenn Spalte leer ist ignorieren

                Zitat von nikosch
                Das halte ich doch für stark diskussionswürdig.
                Daher auch im Anschluss gleich mein Hinweis:
                Zitat von Delirius
                In dem Sinne, dass kein sichtbarer Inhalt vorhanden ist.
                Damit wollte ich ja auch keine Diskussion starten. Für den User selbst ist ja trotzdem kein "sichtbarer Inhalt" vorhanden. Zumindest keiner, aus denen Kennzeichen oder sonstige Daten hervorgehen. Darum wollte ich fragen, wie auch das ausgeblendet werden kann.

                Bei Eingabefeldern werden ja gerne mal Leerzeichen vergessen zu löschen und die können dann unter Umständen bei Abfragen Probleme machen. Daher wollte ich wissen wie andere das lösen?!

                Kommentar


                • #9
                  Zitat von Delirius Beitrag anzeigen
                  Bei Eingabefeldern werden ja gerne mal Leerzeichen vergessen zu löschen und die können dann unter Umständen bei Abfragen Probleme machen. Daher wollte ich wissen wie andere das lösen?!
                  An der Quelle. Im ZF kannst du bei Formularen einen Eingabefilter definieren: StringTrim.

                  Kommentar


                  • #10
                    Korrekt. In der Applikation. Die Datenbank hat nicht zu wissen, welche Typen „gültig“ für welche Prozesse sind.

                    Kommentar


                    • #11
                      Zitat von nikosch Beitrag anzeigen
                      Korrekt. In der Applikation. Die Datenbank hat nicht zu wissen, welche Typen „gültig“ für welche Prozesse sind.
                      Ich würde das so pauschal nicht sagen. Die DB ist eine zentrale Stelle, Clients kann es sehr viele geben, insbesondere auch unterschiedliche. Der DB die Aufgabe zuzuweisen, die Korrektheit der in ihr gespeicherten Daten sicherzustellen entlastet möglicherweise eine ganze Anzahl unterschiedlichster Clients, dies zu tun - und verringert somit die Gefahr inkonsistenter Daten ganz erheblich. Dafür haben aktuelle DB-Systeme übrigens sogar die passende Infrastruktur - eine Vielzahl von Datentypen, TRIGGER, Constraints und so weiter. Und in diesem Sinne legt man z.B. Postleitzahlen eben nicht als numerische Werte an.


                      Andreas

                      Kommentar


                      • #12
                        Der Datentyp für Text mit und ohne führende Leerzeichen ist meines Wissens noch nicht erfunden. Und hat auch wenig mit der Integrität der Datenbankinhalte zu tun. trim oder nicht, ist einfach eine Konvention, deren einziger Sinn in der Applikationslogik begründet liegt. Es sei denn, man missbraucht den leeren String, Strings nur aus Whitespace… als Ersatz für NULL (wie oben angedeutet), was einfach nur ein FAIL Konzept ist.

                        Kommentar


                        • #13
                          Zitat von nikosch Beitrag anzeigen
                          Der Datentyp für Text mit und ohne führende Leerzeichen ist meines Wissens noch nicht erfunden.
                          Code:
                          test=*# create table nikosch( t text check(length(t) = length(btrim(t))));
                          CREATE TABLE
                          test=*# insert into nikosch values ('test');
                          INSERT 0 1
                          test=*# insert into nikosch values ('test2 ');
                          ERROR:  new row for relation "nikosch" violates check constraint "nikosch_t_check"
                          DETAIL:  Failing row contains (test2 ).

                          Datenbanken, die nicht nur Syntaxprüfung für CHECK machen, sind schon was tolles, gell?

                          Und hat auch wenig mit der Integrität der Datenbankinhalte zu tun. trim oder nicht, ist einfach eine Konvention, deren einziger Sinn in der Applikationslogik begründet liegt. Es sei denn, man missbraucht den leeren String, Strings nur aus Whitespace… als Ersatz für NULL (wie oben angedeutet), was einfach nur ein FAIL Konzept ist.
                          Mag sein, kommt halt drauf an.


                          Andreas

                          Kommentar


                          • #14
                            kommt halt drauf an.
                            Einverstanden.

                            Kommentar

                            Lädt...
                            X