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