wie kann ich das realisieren?

Nappi

Mitglied
Hallo.

Ich möchte alle Datensätze einer Tabelle durch einen SQL Befehl danach abfragen ob ein bestimmtes Feld dieses Datensatzes leer ist. Falls es leer ist soll ein "-" reingeschrieben werden. Wenn etwas drin steht soll nix passieren. Das ganze braucht kein php skript oder so sein. Ein einfacher SQL Befehl den ich in phpMyAdmin eintragen kann würde mir schon helfen.

Danke
 
Hallo Nappi,

Wenn ein Feld leer ist, hat es den Wert NULL. Diesen kann man als Bedingung für eine UPDATE Anweisung verwenden:

Code:
UPDATE tabelle SET feld="-" WHERE feld=NULL

Grüße Thomas
 
wenn ich diese Zeile eingebe

Code:
UPDATE tabelle SET feld="-" WHERE feld=IS NULL

kommt leider das dabei raus:

You have an error in your SQL syntax near 'IS NULL' at line 1


Man sollte meinen ich hätte die richtigen Stellen geändert

Was hab ich falsch gemacht?

Nappi
 
Also kucke mal in der (my)Sql Dokumentation dann findest du folgenden LInk:
http://dev.mysql.com/doc/mysql/de/Comparison_Operators.html#IDX1094
So wie es aussieht musst du es so gestalten:
Code:
WHERE
          feld IS NULL
Achja laut Dokumentation ist NULL = IS NULL ...
Und für die die das Linkklicken zu anstrengend ist , steht das in der Dokumentation:
IS NULL
IS NOT NULL
Testet, ob eine Wert NULL ist oder nicht:

mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0 0 1
mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1 1 0
 
Zuletzt bearbeitet:
Also jetzt macht er es ohne fehler Meldung aber es ändert sich nichts!

Selbst wenn in einem Feld nichts ist macht er keinen Eintrag.
Eigendlich sollte doch ein " - " eingetragen werden aber ich bekomme nur die meldung das 0 Datensätze betroffen sind

das ist zB der
Code:
UPDATE users SET nick="-" WHERE nick IS NULL;

und das kommt dabei raus
Betroffene Datensätze: 0 (die Abfrage dauerte 0.0005 sek)

Worin liegt mein Fehler?

Nappi
 
Hallo Nappi,

Steht in dem Feld vielleicht eine leere Zeichenkette drin? Normalerweise unterscheiden Datenbanken zwischen keinen Daten (NULL) und einer leeren Zeichenkette.

Probier mal:
Code:
UPDATE users SET nick="-" WHERE nick = "";

Grüße Thomas
 
Hallo Schau dir diese Befehlsabfolgen mal an:

E:\mysql-4.1.1a-alpha\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.1a-alpha-nt

mysql> use test;
Database changed

mysql> create table tblTest(id int, text varchar(30));
Query OK, 0 rows affected (0.21 sec)

Code:
insert into tblTest values (1,'Test1');
insert into tblTest values (2,'Test2');
insert into tblTest values (3,'Test3');
insert into tblTest values (4,'Test4');
insert into tblTest values (5,'Test5');
insert into tblTest (id) values (6);
insert into tblTest (id) values (7);
insert into tblTest (id) values (8);
insert into tblTest (id) values (9);
insert into tblTest (id) values (10);
insert into tblTest (id,text) values (11,'');


mysql> select * from tblTest;
Code:
+------+-------+
| id   | text  |
+------+-------+
|    1 | Test1 |
|    2 | Test2 |
|    3 | Test3 |
|    4 | Test4 |
|    5 | Test5 |
|    6 | NULL  |
|    7 | NULL  |
|    8 | NULL  |
|    9 | NULL  |
|   10 | NULL  |
|   11 |       |
|   12 |       |
+------+-------+
12 rows in set (0.01 sec)


mysql> select * from tblTest where text is null;
Code:
+------+------+
| id   | text |
+------+------+
|    6 | NULL |
|    7 | NULL |
|    8 | NULL |
|    9 | NULL |
|   10 | NULL |
+------+------+
5 rows in set (0.03 sec)
insert into tblTest (id,text) values (12,' ');

mysql> select * from tblTest where text="";
Code:
+------+------+
| id   | text |
+------+------+
|   11 |      |
|   12 |      |
+------+------+
2 rows in set (0.00 sec)

mysql> select * from tblTest where text is null || text = "";
Code:
+------+------+
| id   | text |
+------+------+
|    6 | NULL |
|    7 | NULL |
|    8 | NULL |
|    9 | NULL |
|   10 | NULL |
|   11 |      |
|   12 |      |
+------+------+
7 rows in set (0.08 sec)

Gruß Tom
 
Zurück