+ Antworten
Ergebnis 1 bis 15 von 15

Thema: Datensätze bei denen ein Feld leer oder nicht vorhanden ist

  1. #1
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215

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

    Hi,

    wie 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?
    Gruß,
    Peter

  2. #2
    TP-Insider Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE
    Registriert seit
    Jan 2008
    Ort
    Hessen
    Beiträge
    885
    Hi,
    ohne es getestet zu haben sollten die Datensätze die das Feld nicht besitzen müssten so ausglesen werden können:

    select * from Artikel where text is null

    bzw, die leeren mit

    select * from Artikel where text = ""

  3. #3
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215
    Das haut leider nicht hin. Die Abfrage liefert nur den Datensatz 20. Es müssten aber eigentlich 20 und 30 gefunden werden.

    PHP-Code:
    SELECT
        
    `artikel`,
        `
    inhalt`
    FROM
        
    `test`
    WHERE
        
    `feld`   = 'text' AND
      ( `
    inhalt` = '' OR
        `
    inhaltIS NULL ); 
    Ist die Abfrage falsch?
    Gruß,
    Peter

  4. #4
    TP-Veteran max.m lebt für das TP und seine User max.m lebt für das TP und seine User max.m lebt für das TP und seine User max.m lebt für das TP und seine User max.m lebt für das TP und seine User max.m lebt für das TP und seine User Avatar von max.m
    Registriert seit
    Dec 2005
    Ort
    Stuttgart
    Beiträge
    1.955
    Zitat Zitat von Schneemann Beitrag anzeigen
    Es müssten aber eigentlich 20 und 30 gefunden werden.
    Sicher? Weil bei Artikel 30 gibt es kein `feld`='text', zumindest nicht in der Tabelle im ersten Post.

  5. #5
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215
    Das will ich aber ja erreichen. Es sollen Datensätze gefunden werden bei denen "text" leer oder nicht vorhanden ist.
    Gruß,
    Peter

  6. #6
    TP-Insider Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE
    Registriert seit
    Jan 2008
    Ort
    Hessen
    Beiträge
    885
    Zitat Zitat von Schneemann Beitrag anzeigen
    Das haut leider nicht hin. Die Abfrage liefert nur den Datensatz 20. Es müssten aber eigentlich 20 und 30 gefunden werden.

    PHP-Code:
    SELECT
        
    `artikel`,
        `
    inhalt`
    FROM
        
    `test`
    WHERE
        
    `feld`   = 'text' AND
      ( `
    inhalt` = '' OR
        `
    inhaltIS NULL ); 
    Ist die Abfrage falsch?
    So kann er 30 nicht finden, da die erste Where Klausel nicht zutrifft und mit AND verknüpft ist.

  7. #7
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215
    Wie müsste eine Abfrage korrekt heißen um da ranzukommen?
    Gruß,
    Peter

  8. #8
    TP-Insider Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE Frangulus ist ein richtiges Arbeitstier - DANKE
    Registriert seit
    Jan 2008
    Ort
    Hessen
    Beiträge
    885
    Bei näherer Betrachtung geht es doch nicht so einfach.
    Ich hatte die DB-Struktur zuerst nicht richtig interpretiert.
    Du suchst nach Datensätzen die es nicht gibt, also nach Artikeln (30) der kein Feld "Text" hat.
    Das geht z.Bsp. mit verschachtelten Abfragen. LINK
    Muss jetzt leider los zu einer Weihnachtsfeier, versuch mal ob Du mit dem Link weiterkommst.

  9. #9
    TP-Senior Moritz macht sich hier sehr viel Mühe
    Registriert seit
    Nov 2002
    Beiträge
    289
    Versuchs mal mit
    PHP-Code:
    SELECT 
    FROM test 
    WHERE 
       
    (feld 'text' AND inhalt '') OR 
       
    artikel NOT IN (SELECT artikel FROM test WHERE feld 'text'
    Das ist jetzt mal so schnell hingeschrieben, könnte sein, dass noch Optimierungsbedarf besteht.
    Genrell solltest Du darüber nachdenken, deine Tabellen zu normalisieren, damit Du dir solcherlei Probleme sparst.

    Grüße,
    ...zur Zeit außer Betrieb...

  10. #10
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215
    @Moritz: Das scheint für das Beispiel zu funktionieren. Ich muss es mir nun mal ins Hirn brennen was genau du da machst und wie ich das auf die komplexe Abfrage bei mir ummünzen kann.
    Gruß,
    Peter

  11. #11
    TP-Senior Moritz macht sich hier sehr viel Mühe
    Registriert seit
    Nov 2002
    Beiträge
    289
    Ist keine Rocketscience ;-)

    Noch ein paar erläuternde Worte:
    PHP-Code:
    (feld 'text' AND inhalt ''
    gibt alle Einträge zurück, die zwar das Feld "text" haben, dessen Inhalt aber leer ist.
    PHP-Code:
    artikel NOT IN (SELECT artikel FROM test WHERE feld 'text'
    gibt alle Datensätze zurück, bei denen die Aritkelnr nicht in der Untermenge der Artikel ist, die über ein Feld mit "text" verfügen.

    Evtl solltest Du den den ersten Teil noch so erweitern, um die NULL-Werte abzufangen:
    PHP-Code:
    (feld 'text' AND (inhalt '' OR inhalt IS NULL)) 
    ...zur Zeit außer Betrieb...

  12. #12
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215
    Kann man das auch in einem JOIN einsetzen statt in der WHERE Clausel?
    Gruß,
    Peter

  13. #13
    TP-Senior Moritz macht sich hier sehr viel Mühe
    Registriert seit
    Nov 2002
    Beiträge
    289
    Du meinst statt dem WHERE einen JOIN?
    ...zur Zeit außer Betrieb...

  14. #14
    TP-Senior Schneemann macht alles soweit korrekt Avatar von Schneemann
    Registriert seit
    Jan 2006
    Beiträge
    215
    Nein die Einschränkung mit dem NOT IN SELECT in einen JOIN ergänzen.
    Gruß,
    Peter

  15. #15
    TP-Senior Moritz macht sich hier sehr viel Mühe
    Registriert seit
    Nov 2002
    Beiträge
    289
    Mhh, gute Frage - da Du aber ja Datensätze haben willst, bei denen das Feld _nicht_ vorhanden ist, denke ich nicht, dass das so ohne weiteres geht (ich lasse mich aber gerne eines besseren belehren!)
    Auch gibt es aus meiner Sicht (imho) keinen Grund, keinen Subselect zu machen.
    ...zur Zeit außer Betrieb...

+ Antworten

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 12.02.2010, 04:57
  2. DB Feld bleibt leer???
    Von DenisCGN im Forum Traum-Dynamik
    Antworten: 4
    Letzter Beitrag: 29.03.2005, 00:52
  3. Antworten: 10
    Letzter Beitrag: 12.02.2004, 13:58
  4. überprüfen ob feld leer ist
    Von pierre im Forum Traum-Dynamik
    Antworten: 6
    Letzter Beitrag: 15.12.2003, 18:03
  5. Antworten: 3
    Letzter Beitrag: 29.10.2001, 16:44

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51