PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL: Zelleninhalt erweitern



QuakeCon
07.02.05, 13:58
Hallo zusammen,

Ich weiss, ist vielleicht nicht das perfekte Forum fuer diese Frage, aber in letzter Zeit konne man mir hier meistens helfen. Und ich denke, dass einpaar von euch sicher SQL beherrschen.

Befehl:

Update `HostGroup` SET members=members||`,host4` where hostgroup_name=`linux-test`;

(Mein Problem ist, das dieser Befehl den Zelleninhalt loescht und eine 0 reinschreibt.)

In Worten:

In der Tabelle HostGroup gibt es eine Spalte members, fuer die Mitglieder der HostGruppe linux-test. Ich moechte jetzt mit meinem Befehl host4 in diese Gruppe adden. Jedoch weiss ich nicht genau wie ich da anstellen sollte. Concat? Variablen? sogar konkreter Befehl?

Lange Rede kurzer Sinn: Ich moechte eigentlich nur der Zelleninhalt erweitern ohne das die vorherigen Werte geloescht werden.

Vielen Dank fuer eure Hilfe :-)

MatzeG2002
07.02.05, 14:17
Hallo,

also ein kleiner Workarround wäre den Inhalt der Zelle vorher auslesen,
den neuen String hinten dranhängen und das gesamte wieder in die DB schreiben.

Ob es so funktioniert wie du vorhast, hängt wahrscheinlich auch von dem verwendeten DB-System ab.
Ich gehe davon aus das Du MySQL verwendest ?!

Gruß Matthias

Jasper
07.02.05, 14:26
Lange Rede kurzer Sinn: Ich moechte eigentlich nur der Zelleninhalt erweitern ohne das die vorherigen Werden geloescht werden.


mal abgesehen davon, dass das db-design grauenvoll ist (nagios?), nimm concat dafür.


-j

QuakeCon
07.02.05, 14:27
danke schonmal fuer die antwort... ja genau mysql... so wie ich den befehl vorher aufgeschrieben habe funktionert er aber nur in DB2... :-(

ja so muesste ich es machen, zuerst den inhalt in eine variable einlesen anschliessend den neuen String anhaengen und wieder zurueck schreiben, jedoch habe ich keine ahnug wie ich das anstellen soll... da ich auch keine ahnung von variablen im zusammenhang mit sql habe...

kannst du mir vielleicht helfen :-)

MatzeG2002
07.02.05, 14:39
Was nutzt Du für ein Frontend bzw. mit was greifst Du auf die DB zu ?
(PHP, C++/C#, etc..)
Gibt es schon ein bisschen Quellcode ?

Gruß Matthias

QuakeCon
07.02.05, 14:40
hehehe ganz genau nagios.... bzw. nagmin... ich moechte eben nagios administrieren ubere eine Lotus Notes Front End und das geht nunmal ueber eine DB(ODBC Intf.) ... Nagmin ist meiner Meinung nach das beste Tool um die Konfigs in eine DB zu schreiben und umgekehrt.

@Jasper kannst du mir zeigen, wie ich den Concat befehl verwenden muss? oder hast du sogar schon erfahrungen mit nagmin und nagios gemacht?

Danke

Jasper
07.02.05, 15:18
@Jasper kannst du mir zeigen, wie ich den Concat befehl verwenden muss? oder hast du sogar schon erfahrungen mit nagmin und nagios gemacht?


update <table> set <column>=concat(<column>,<value>) where <column>=<value>;


-j

QuakeCon
08.02.05, 07:11
Danke,

Leider weiss ich noch nicht genau wie das Value aussehen soll im Concat, den ich habe folgendes Problem:

Hostnamen sind nur durch ein Komma getrennt in der Tabelle also: host1,host2,host3

Value muesst ja dann rein theoretisch so aussehen:


members=concat(members, ,host4)

Das frisst er aber nicht wegen den zwei Kommas hintereinander. Syntax Error.

Weisst du wie ich das in den Griff kriege?


Habe gerade noch ein anderen Command entdeckt: concat_ws bei diesem Befehl kann ich das Trennzeichen definieren:


members=concat_ws(",","members","host4")

Leider funzt dieser Befehl auch nicht wirklich :-( Ich habe die Vermutung, das es daran liegt, dass er members nicht einfach als Variable fuer diese Zelle nimmt, sondern dass man es irgendwie vorher noch definieren sollte ?:-/

Jasper
08.02.05, 18:18
setze die values in anführungszeichen, sind ja strings.


-j

QuakeCon
09.02.05, 07:41
danke fuer deine antwort, ich weiss nicht ob ich einfach zu bloed bin den befehl einzugeben oder ob es so von mysql nicht unterstuetzt ist... denn es kommt immernoch Syntax Error raus...


update 'HostGroup' set members=concat('members', ',host4') where hostgroup_name='linux-test';

Weisst du evtl. noch weiter :confused:

Danke das du dir Zeit genommen hast fuer mich :)

Jasper
09.02.05, 13:46
Weisst du evtl. noch weiter :confused:


du sollst nur die values in anführungszeichen setzen, nicht die column namen:

update HostGroup set members=concat(members, ',host4') where hostgroup_name='linux-test';


-j

QuakeCon
11.02.05, 13:39
JUUUUHUUUUUU danke vielmals Jasper.... wir brauchen mehr Leute von deiner Sorte in der OpenSource Community... danke :-)