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 = ""
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:
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.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 |
+------------------------------------------+
Wie kann man alle Artikel auslesen, bei denen entweder das Feld "text" leer ist oder die die das Feld gar nicht besitzen?
Gruß,
Peter
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 = ""
Grüße aus dem Odenwald
Thomas
Das haut leider nicht hin. Die Abfrage liefert nur den Datensatz 20. Es müssten aber eigentlich 20 und 30 gefunden werden.
Ist die Abfrage falsch?PHP-Code:SELECT
`artikel`,
`inhalt`
FROM
`test`
WHERE
`feld` = 'text' AND
( `inhalt` = '' OR
`inhalt` IS NULL );
Gruß,
Peter
Das will ich aber ja erreichen. Es sollen Datensätze gefunden werden bei denen "text" leer oder nicht vorhanden ist.
Gruß,
Peter
Grüße aus dem Odenwald
Thomas
Wie müsste eine Abfrage korrekt heißen um da ranzukommen?
Gruß,
Peter
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.
Grüße aus dem Odenwald
Thomas
Versuchs mal mit
Das ist jetzt mal so schnell hingeschrieben, könnte sein, dass noch Optimierungsbedarf besteht.PHP-Code:SELECT *
FROM test
WHERE
(feld = 'text' AND inhalt = '') OR
artikel NOT IN (SELECT artikel FROM test WHERE feld = 'text')
Genrell solltest Du darüber nachdenken, deine Tabellen zu normalisieren, damit Du dir solcherlei Probleme sparst.
Grüße,
...zur Zeit außer Betrieb...
@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
Ist keine Rocketscience ;-)
Noch ein paar erläuternde Worte:
gibt alle Einträge zurück, die zwar das Feld "text" haben, dessen Inhalt aber leer ist.PHP-Code:(feld = 'text' AND inhalt = '')
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.PHP-Code:artikel NOT IN (SELECT artikel FROM test WHERE feld = 'text')
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...
Kann man das auch in einem JOIN einsetzen statt in der WHERE Clausel?
Gruß,
Peter
Du meinst statt dem WHERE einen JOIN?
...zur Zeit außer Betrieb...
Nein die Einschränkung mit dem NOT IN SELECT in einen JOIN ergänzen.
Gruß,
Peter
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...
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)