Kopieren und dabei Eintrag ändern
Kopieren und dabei Eintrag ändern
am 11.10.2007 16:30:50 von Knut Krueger
--- garantiert kein PHP ;-) --------
Hallo zusammen,
ich weiß nicht ob jemand Refbase (http://www.refbase.net) kennt, dann
wäre es sicher verständlicher. Aber ich versuche es verständlich zu
erklären.
Es gibt eine Tabelle *User* das stehen die user_id drin.
Je nach Login werden die Daten mit der gleichen user_id, die in Tabelle
*user_data* stehen dem user zur Verfügung gestellt.
user_data:
data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes
user_file,user_groups,cite_key,related
User 11 bekommt also die Daten die in Tabelle User_data - user_id 11
haben angezeigt.
wie kann ich die Daten z.B User 12 also user_id=12 zur Verfügung
stellen, aber nur mit den Feldern
record_id,user_file,related
und nur diejenigen die im Feld user_file ein pdf file haben also ".pfd"
im Feld vorhanden ist
bei denen die Record Id schon vorhanden ist müsste nur das Feld user
file kopiert werden.
data_id ist das auto_increment Feld
Ich habe keinen Plan mit wie vielen und welchen Schritten ich das machen
kann. Insgesamt sind es ca 500 Datensätze von 3500
Ich habe eine lokale Datenbankkopie um solche Dinge erst auszuprobieren
Wissensstand:
einfache SQL Befehle wie
update ... set ... where
delete from ... where ... rlike
usw.
Hoffentlich war das nachvollziehbar ...
Viele GRüße Knut
Re: Kopieren und dabei Eintrag ändern
am 11.10.2007 18:10:03 von Christian Kirsch
Knut Krueger schrieb:
> --- garantiert kein PHP ;-) --------
>
> Hallo zusammen,
> ich weiß nicht ob jemand Refbase (http://www.refbase.net) kennt, dann
> wäre es sicher verständlicher. Aber ich versuche es verständlich zu
> erklären.
>
> Es gibt eine Tabelle *User* das stehen die user_id drin.
> Je nach Login werden die Daten mit der gleichen user_id, die in Tabelle
> *user_data* stehen dem user zur Verfügung gestellt.
>
> user_data:
> data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes
> user_file,user_groups,cite_key,related
>
> User 11 bekommt also die Daten die in Tabelle User_data - user_id 11
> haben angezeigt.
>
> wie kann ich die Daten z.B User 12 also user_id=12 zur Verfügung
> stellen, aber nur mit den Feldern
>
> record_id,user_file,related
>
> und nur diejenigen die im Feld user_file ein pdf file haben also ".pfd"
> im Feld vorhanden ist
>
Wie wäre es denn mit SELECT?
SELECT record_id, user_file, related FROM user_data WHERE data_id=12 AND
user_file like '%.pfd'
> bei denen die Record Id schon vorhanden ist müsste nur das Feld user
> file kopiert werden.
>
Häh? Warum willst Du denn jetzt was kopieren? Und wohin soll dieses Feld
kopiert werden?
>
> data_id ist das auto_increment Feld
>
....
>
> Hoffentlich war das nachvollziehbar ...
Nicht wirklich - wenn Du etwas weniger Prosa und etwas mehr beispielhaft
"das habe ich", "das will ich" schriebest, wäre es verständlicher.
"Nachvollziehbar" verstehe ich ohnehin nicht.
Re: Kopieren und dabei Eintrag ändern
am 11.10.2007 19:25:40 von Knut Krueger
> ...
>> Hoffentlich war das nachvollziehbar ...
>
> Nicht wirklich - wenn Du etwas weniger Prosa und etwas mehr beispielhaft
> "das habe ich", "das will ich" schriebest, wäre es verständlicher.
Das habe ich
data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
data_id=autoincrement
user_id= 11
record_id=123
......
user_file=*.pdf
das möchte ich
neuen Record:
data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
data_id=autoincrement
user_id= 12
record_id=123
...... nicht kopieren ....
user_file=*.pdf
.... nicht kopieren
aber nur wenn Record 123 und user_id=12 nicht vorhanden und Feld
user_file ".pdf" enthält
Record 123 und user_id=12 vorhanden Feld user_file kopieren,
aber das letzte bekomme ich auch alleine hin.
Grüße Knut
Re: Kopieren und dabei Eintrag ändern
am 12.10.2007 09:33:30 von Christian Kirsch
Am 11.10.2007 19:25 schrieb Knut Krueger:
>> ...
>>> Hoffentlich war das nachvollziehbar ...
>> Nicht wirklich - wenn Du etwas weniger Prosa und etwas mehr beispielhaft
>> "das habe ich", "das will ich" schriebest, wäre es verständlicher.
>
> Das habe ich
>
> data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
> data_id=autoincrement
> user_id= 11
> record_id=123
> .....
> user_file=*.pdf
>
> das möchte ich
> neuen Record:
> data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
> data_id=autoincrement
> user_id= 12
> record_id=123
> ..... nicht kopieren ....
> user_file=*.pdf
> ... nicht kopieren
>
dev.mysql.com/doc
Abschnitt zu "INSERT INTO", Unterabschnitt zu INSERT INTO ... SELECT
INSERT INTO bla (user_id, record_id, ..., user_file) SELECT FROM bla
12, record_id, ..., user_file
> aber nur wenn Record 123 und user_id=12 nicht vorhanden und Feld
> user_file ".pdf" enthält
>
Verstehe ich wieder nicht. Wenn Du einen neuen Datensatz erzeugen
willst ("neuer Record"), dann sind doch dessen Felder per
definitionem leer. Sonst wäre es ja kein neuer Datensatz. Wo also soll
nun "record 123 nicht vorhanden" sein (Du meinst ja vermutlich, dass
in record *nicht* 123 stehen soll).
Oder meinst Du "Der neue Datensatz soll nur erzeugt werden, wenn es
noch keinen Eintrag für user_id 12 gibt, bei dem record=123 ist und in
user_file was steht"?
Zumindest die ersten beiden Bedingungen würde ein unique index auf
(user_id, record) erledigen.
>
> Record 123 und user_id=12 vorhanden Feld user_file kopieren,
> aber das letzte bekomme ich auch alleine hin.
>
Vielleicht hilft Dir dev.mysql.com/doc weiter, und zwar der Abschnitt
zu "REPLACE"?
--
Christian
Re: Kopieren und dabei Eintrag ändern
am 12.10.2007 12:36:08 von Knut Krueger
Christian Kirsch schrieb:
> dev.mysql.com/doc
>
> Abschnitt zu "INSERT INTO", Unterabschnitt zu INSERT INTO ... SELECT
>
> INSERT INTO bla (user_id, record_id, ..., user_file) SELECT FROM bla
> 12, record_id, ..., user_file
Damit habe ich es eben nicht komplett hinbekommen ...
Insert into, Select from, usw verwende ich ja laufen, aber eben nur für
einfachere Aufgaben.
> Am 11.10.2007 19:25 schrieb Knut Krueger:
> Oder meinst Du "Der neue Datensatz soll nur erzeugt werden, wenn es
> noch keinen Eintrag für user_id 12 gibt, bei dem record=123 ist und in
> user_file was steht"?
>
> Zumindest die ersten beiden Bedingungen würde ein unique index auf
> (user_id, record) erledigen.
>
vielleicht doch etwas Prosa damit wir uns nicht missverstehen ;-)
Erst wenn ein User etwas zu dem Datensatz z.B 123 in seine persönlichen
Felder was eingetragen hat wird der Datensatz angelegt.
Ich darf also nichts daran ändern falls er schon vorhanden ist außer das
Feld user_file.
Ist er nicht vorhanden muss ich ihn anlegen mid User_ID 12 und die o.a
Felder füllen.
ist er da nur das Feld user_file.
Viele Grüße Knut
Re: Kopieren und dabei Eintrag ändern
am 16.10.2007 12:42:20 von Knut Krueger
Nur eine kurze Frage damit ich weiß ob ich mir weiter darüber den
Gedanken machen soll:
Geht das nicht oder weiß niemand was ich eigentlich möchte.
viele Grüße Knut
Re: Kopieren und dabei Eintrag ändern
am 16.10.2007 13:20:02 von Christian Kirsch
Knut Krueger schrieb:
> Nur eine kurze Frage damit ich weiß ob ich mir weiter darüber den
> Gedanken machen soll:
> Geht das nicht oder weiß niemand was ich eigentlich möchte.
>
Zu ersterem kann ich nichts sagen, da letzteres zutrifft.
Re: Kopieren und dabei Eintrag ändern
am 16.10.2007 13:51:31 von Knut Krueger
Christian Kirsch schrieb:
> Knut Krueger schrieb:
>> Nur eine kurze Frage damit ich weiß ob ich mir weiter darüber den
>> Gedanken machen soll:
>> Geht das nicht oder weiß niemand was ich eigentlich möchte.
>>
>
> Zu ersterem kann ich nichts sagen, da letzteres zutrifft.
Ich versuchs nochmal
Tabelle:
data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
data_id=autoincrement
Kopiere die Inhalte der Felder record_id,related,user_file aller
Datensätz mit user_id x, die im Feld User_file "pdf" enthalten, in einen
neuen Datensatz und tausche User_id x gegen y;
Ist schon ein Datensatz mit user_id y und gleicher record_id vorhanden
kopiere nur den Inhalt des Feldes user_file
Viele Grüße Knut
Re: Kopieren und dabei Eintrag ändern
am 16.10.2007 15:39:56 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Kopieren und dabei Eintrag ändern
am 16.10.2007 16:24:26 von Claus Reibenstein
Knut Krueger schrieb:
> Tabelle:
> data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
> data_id=autoincrement
>
> Kopiere die Inhalte der Felder record_id,related,user_file aller
> Datensätz mit user_id x, die im Feld User_file "pdf" enthalten, in einen
> neuen Datensatz und tausche User_id x gegen y;
>
> Ist schon ein Datensatz mit user_id y und gleicher record_id vorhanden
> kopiere nur den Inhalt des Feldes user_file
Ich versuch's mal:
INSERT Tabelle (user_id, record_id, related, user_file)
SELECT 'y', record_id, related, user_file FROM Tabelle
WHERE user_id = 'x' AND user_file LIKE '%pdf%'
ON DUPLICATE KEY UPDATE user_file = VALUES(user_file);
Ohne Gewähr und ungetestet :-)
Gruß. Claus
Re: Kopieren und dabei Eintrag ändern
am 16.10.2007 23:50:53 von knut.krueger
Claus Reibenstein schrieb:
> Knut Krueger schrieb:
>
>> Tabelle:
>> data_id,user_id,record_id,marked,copy,selected,user_keys,use r_notes,user_file,user_groups,cite_key,related
>> data_id=autoincrement
>>
>> Kopiere die Inhalte der Felder record_id,related,user_file aller
>> Datensätz mit user_id x, die im Feld User_file "pdf" enthalten, in einen
>> neuen Datensatz und tausche User_id x gegen y;
>>
>> Ist schon ein Datensatz mit user_id y und gleicher record_id vorhanden
>> kopiere nur den Inhalt des Feldes user_file
>
> Ich versuch's mal:
>
> INSERT Tabelle (user_id, record_id, related, user_file)
> SELECT 'y', record_id, related, user_file FROM Tabelle
> WHERE user_id = 'x' AND user_file LIKE '%pdf%'
> ON DUPLICATE KEY UPDATE user_file = VALUES(user_file);
>
> Ohne Gewähr und ungetestet :-)
Vielen Dank
Knut
p.s
Mein Motherboard auf dem mein Xammp mit Datenbank installiert ist gerade
abgeraucht. Auf der orginal Datenbank möchte ich das jetzt nicht
unbedingt testen ;-)
Wenn ich ein neues MB habe melde ich mich wieder
Re: Kopieren und dabei Eintrag ändern
am 17.10.2007 07:09:36 von Andreas Krueger
Knut Krüger schrieb :
> Mein Motherboard auf dem mein Xammp mit Datenbank installiert ist
> gerade abgeraucht. Auf der orginal Datenbank möchte ich das jetzt
> nicht unbedingt testen ;-)
> Wenn ich ein neues MB habe melde ich mich wieder
Ich hätte da gerade noch 'n schönes Maschinchen abzugeben :-)
IBM xSeries 345, 2x 2 Ghz Xeon DP, 2 GB Ram, 6x 73 GB an Array 4Lx, 2x GB Lan, Remotemanagement
Cu, Andreas
--
************************************************************ **************************************
Persönliche Antworten bitte an a99b00c54@remote.dyndns.info, die
Replyadresse wird nicht gelesen ! Mails bitte als Nur Text Senden !!
Send Private-Messages only to a99b00c54@remote.dyndns.info, the reply
adress will not be read ! Please send only as Plaintext !!
Re: Kopieren und dabei Eintrag ändern
am 26.10.2007 09:19:33 von knut.krueger
Claus Reibenstein schrieb:
Vielen Dank,
> Ich versuch's mal:
>
> INSERT Tabelle (user_id, record_id, related, user_file)
> SELECT 'y', record_id, related, user_file FROM Tabelle
> WHERE user_id = 'x' AND user_file LIKE '%pdf%'
so weit alles klar und funktioniert zum kopieren (natürlich mit Werten
für x,y und Tabelle)
> ON DUPLICATE KEY UPDATE user_file = VALUES(user_file);
nur hier kommt die Meldung:
User_file ambiguous
Da kann ich derzeit nichts mit anfangen
Viele Grüße Knut
Re: Kopieren und dabei Eintrag ändern
am 26.10.2007 10:11:21 von Claus Reibenstein
Knut Krueger schrieb:
> Claus Reibenstein schrieb:
>
>> INSERT Tabelle (user_id, record_id, related, user_file)
>> SELECT 'y', record_id, related, user_file FROM Tabelle
>> WHERE user_id = 'x' AND user_file LIKE '%pdf%'
>
> so weit alles klar und funktioniert zum kopieren (natürlich mit Werten
> für x,y und Tabelle)
>
>> ON DUPLICATE KEY UPDATE user_file = VALUES(user_file);
>
> nur hier kommt die Meldung:
> User_file ambiguous
Das ist merkwürdig. Laut Dokumentation sollte es genau so funktionieren.
Oder habe ich etwas übersehen?
Probier mal diese Variante:
INSERT Tabelle (user_id, record_id, related, user_file)
SELECT 'y', record_id, related, user_file FROM Tabelle t2
WHERE user_id = 'x' AND user_file LIKE '%pdf%'
ON DUPLICATE KEY UPDATE user_file = t2.user_file;
Also mit Hilfe eines Alias im SELECT und einer Referenz auf diesen Alias
statt der VALUES-Funktion.
Gruß. Claus
Re: Kopieren und dabei Eintrag ändern
am 26.10.2007 11:04:26 von knut.krueger
Hallo Klaus,
ich bin ja froh dass es nicht ganz so trivial ist ;-)
INSERT user_data(user_id, record_id, related, user_file)
SELECT '3', record_id, related, user_file FROM user_data t2
WHERE user_id = '11' AND user_file LIKE '%pdf%'
ON DUPLICATE KEY UPDATE user_file = t2.user_file
Antwort: 1110 - Column 'user_file' specified twice
Viele Grüße Knut
Re: Kopieren und dabei Eintrag ändern
am 06.11.2007 12:20:37 von Bernhard Kleine
Am Fri, 26 Oct 2007 11:04:26 +0200 schrieb Knut Krueger:
> Hallo Klaus,
> ich bin ja froh dass es nicht ganz so trivial ist ;-)
>
> INSERT user_data(user_id, record_id, related, user_file)
> SELECT '3', record_id, related, user_file FROM user_data t2 WHERE
> user_id = '11' AND user_file LIKE '%pdf%' ON DUPLICATE KEY UPDATE
> user_file = t2.user_file
>
> Antwort: 1110 - Column 'user_file' specified twice
>
>
> Viele GrüÃe Knut
Fehlt da nicht ein komma?
FROM user_data, t2
Bernhard
Re: Kopieren und dabei Eintrag ändern
am 06.11.2007 14:25:05 von Andreas Scherbaum
Claus Reibenstein <4spammersonly@web.de> wrote:
>
> INSERT Tabelle (user_id, record_id, related, user_file)
Nur mal als Zwischenfrage: wann wurde denn das 'INSERT INTO'
abgeschafft?
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: Kopieren und dabei Eintrag ändern
am 06.11.2007 15:18:47 von Claus Reibenstein
Andreas Scherbaum schrieb:
> Claus Reibenstein <4spammersonly@web.de> wrote:
>
>> INSERT Tabelle (user_id, record_id, related, user_file)
>
> Nur mal als Zwischenfrage: wann wurde denn das 'INSERT INTO'
> abgeschafft?
Gar nicht.
Gruß. Claus
Re: Kopieren und dabei Eintrag ändern
am 06.11.2007 20:07:24 von Andreas Scherbaum
Claus Reibenstein <4spammersonly@web.de> wrote:
> Andreas Scherbaum schrieb:
>
>> Claus Reibenstein <4spammersonly@web.de> wrote:
>>
>>> INSERT Tabelle (user_id, record_id, related, user_file)
>>
>> Nur mal als Zwischenfrage: wann wurde denn das 'INSERT INTO'
>> abgeschafft?
>
> Gar nicht.
Wunderte mich. Hab zwar nicht im 2003er Standard nachgeschaut aber
in SQL99 war noch explizit "INSERT INTO" definiert.
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: Kopieren und dabei Eintrag ändern
am 06.11.2007 21:48:20 von Claus Reibenstein
Andreas Scherbaum schrieb:
> Wunderte mich. Hab zwar nicht im 2003er Standard nachgeschaut aber
> in SQL99 war noch explizit "INSERT INTO" definiert.
Meines Wissens war INTO schon immer optional. Allerdings habe ich keinen
Standard hier, um das zu prüfen. Zumindest in MySQL 4.0 war es schon so.
Gruß. Claus
Re: Kopieren und dabei Eintrag ändern
am 07.11.2007 13:09:09 von Andreas Scherbaum
Claus Reibenstein <4spammersonly@web.de> wrote:
> Andreas Scherbaum schrieb:
>
>> Wunderte mich. Hab zwar nicht im 2003er Standard nachgeschaut aber
>> in SQL99 war noch explizit "INSERT INTO" definiert.
>
> Meines Wissens war INTO schon immer optional. Allerdings habe ich keinen
> Standard hier, um das zu prüfen. Zumindest in MySQL 4.0 war es schon so.
----- aus SQL1998 -----
13.8
Function
Create new rows in a table.
Format
::=
INSERT INTO { | CURSOR }
____________________________________________________________ __
ANSI Only-caused by ISO changes not yet considered by ANSI
____________________________________________________________ __
----- aus SQL1998 -----
Ich sehe da nicht, das 'INTO' optional wäre, lasse mich aber gern eines
besseren belehren.
Das Mysql dies optional gestaltet, wundert mich irgendwie nicht,
war aber auch nicht Gegenstand meiner Frage.
Abgesehen davon funktioniert die "Kurzform" selbst im Strict Mode,
was dann wohl falsch ist.
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: Kopieren und dabei Eintrag ändern
am 07.11.2007 14:17:04 von Claus Reibenstein
Andreas Scherbaum schrieb:
> Claus Reibenstein <4spammersonly@web.de> wrote:
>
>> Meines Wissens war INTO schon immer optional. Allerdings habe ich keinen
>> Standard hier, um das zu prüfen. Zumindest in MySQL 4.0 war es schon so.
>
> ----- aus SQL1998 -----
>
> [...]
> ::=
> INSERT INTO { | CURSOR }
> [...]
>
> Ich sehe da nicht, das 'INTO' optional wäre, [...]
Ich auch nicht :-)
Danke für die Info.
Gruß. Claus
Re: Kopieren und dabei Eintrag ändern
am 12.11.2007 08:33:51 von knut.krueger
Bernhard Kleine schrieb:
>
>
> Fehlt da nicht ein komma?
> FROM user_data, t2
>
> Bernhard
INSERT user_data(user_id, record_id, related, user_file) SELECT '3',
record_id, related, user_file FROM user_data, t2 WHERE user_id = '11'
AND user_file LIKE '%pdf%' ON DUPLICATE KEY UPDATE user_file = t2.user_file
SQL meldet:
#1146 - Table 'refdb.t2' doesn't exist
Viele GrüÃe Knut
Re: Kopieren und dabei Eintrag ändern
am 12.11.2007 10:34:18 von Claus Reibenstein
Bernhard Kleine schrieb:
> Am Fri, 26 Oct 2007 11:04:26 +0200 schrieb Knut Krueger:
>
>> INSERT user_data(user_id, record_id, related, user_file)
>> SELECT '3', record_id, related, user_file FROM user_data t2 WHERE
>> user_id = '11' AND user_file LIKE '%pdf%' ON DUPLICATE KEY UPDATE
>> user_file = t2.user_file
>
> Fehlt da nicht ein komma?
> FROM user_data, t2
Nein.
GruÃ. Claus