[MySQL] Datensätze bei denen ein Feld leer oder nicht vorhanden ist

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

  • [MySQL] Datensätze bei denen ein Feld leer oder nicht vorhanden ist

    Hi,

    kann man alle Datensätze abfragen in denen ein bestimmtes Feld leer bzw. nicht vorhanden ist?

    Mein Artikel sieht in der Datenbank so aus:
    PHP-Code:
    +------------------------------------------+
    id artikel feld      inhalt        |
    +------------------------------------------+
    1  10      headline  Löwe          |
    2  10      text      Heimat Afrika |
    +------------------------------------------+
    3  20      headline  Giraffe       |
    4  20      text      |               |
    +------------------------------------------+
    5  30      headline  Nashorn       |
    +------------------------------------------+ 
    Es gibt eine Tabelle für Artikel und eine für deren Inhalte. Die Artikel-Tabelle beinhaltet nur immer vorhandene Daten wie Erstellungsdatum, Autor etc. Die Inhaltstabelle (siehe oben) die Felder der Artikel. Sie können im Backend in verschiedenen Ordnern liegen und verschiedene Felder haben. Ein Artikel halt also x Felder und Inhalte.

    Wie kann man alle Artikel auslesen, bei denen entweder das Feld "text" leer ist oder die die das Feld gar nicht besitzen?

  • #2
    Wenn die Spalte den Default-Wert NULL hat einfach über
    Code:
    WHERE feldname IS NULL
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Damit bekomme ich aber den Datensatz nicht raus.

      PHP-Code:
      SELECT
          
      `artikel`,
          `
      inhalt`
      FROM
          
      `test`
      WHERE
          
      `feld`   = 'text' AND
        ( `
      inhalt` = '' OR
          `
      inhaltIS NULL ); 
      Das liefert zwar den Artikel 20, aber nicht den 30, der das Feld nicht halt.

      Ist die Abfrage nciht richtig oder was mache ich falsch?
      Zuletzt geändert von Tequito; 09.12.2010, 12:36.

      Kommentar


      • #4
        wie kann der Datensatz 30 das Feld nicht haben - das ist bei einer ordentlich normalisierten Datenbank nicht möglich - da haben ALLE Datensätze automatisch ALLE Felder - die können dann NULL enthalten oder Leere Zeichenketten, wobei NULL zu bevorzugen wäre, für den Fall, dass diese Daten eben nicht präsent sind ....

        aber deine Datenstruktur ist sowieso ziemlich merkwürdig ..

        wenn text sowieso zum gleichen Datensatz gehört, warum gibts dafür dann einen neuen Datensatz ?
        [font=Verdana]
        Wer LESEN kann, ist klar im Vorteil!
        [/font]

        Kommentar


        • #5
          Ich versuche es mal so zu beschreiben. Es gibt 10 Ordner. Jeder Ordner hat willkürliche vom Benutzer festgelegte Felder.

          Die Inhalte dieser Felder laufen in einer zentralen Tabelle "Inhalt". Anders müsste man ja eine Unmenge von Tabellen erstellen immer wenn man einen neuen Ordner erstellt.

          Der Ordner "Tiere" hat 5 Felder, der Ordner "Pflanzen" hat 8. Die Felder heißen jeweils völlig unterschiedlich, könnten aber auch identische Namen haben.

          Wenn man in einem Artikel ist kann man mit einer Funktion anhand des Feldnamens diesen ausgeben. Das Beispiel oben entspricht nicht einem Ordner sondern ist ein Querschnitt aus der Datenbank.

          Ich will für einen Artikel, der 100 Felder hat, aber wo der User nur bspw. 3 befüllt, nicht 100 Datensätze anlegen. Das wäre massiver Overhead.

          Daraus will ich nun ermitteln, bei welchen Datensätzen ein Feld X vorhanden oder leer ist.

          Kommentar


          • #6
            Hallo,

            du musst mit einem negativen Self Left Join nochmal dieselbe Tabelle joinen:

            Code:
            select
                t1.`artikel`,
                t1.`feld`,
                t1.`inhalt`
            from `test` as t1
            left join `test` as t2 on t2.`artikel` = t1.`artikel`
                and t2.`feld` = 'text'
                and t2.`inhalt` is not null
                and t2.`inhalt` != ''
            where t2.`id` is null
            liefert dir alle Artikel, die keinen Text haben.

            Gruß,

            Amica
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar

            Lädt...
            X