Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kopieren und dabei Eintrag ändern

23 views
Skip to first unread message

Knut Krueger

unread,
Oct 11, 2007, 10:30:50 AM10/11/07
to
--- 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,user_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

Christian Kirsch

unread,
Oct 11, 2007, 12:10:03 PM10/11/07
to
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,user_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.


Knut Krueger

unread,
Oct 11, 2007, 1:25:40 PM10/11/07
to
> ...
>> 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,user_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,user_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

Christian Kirsch

unread,
Oct 12, 2007, 3:33:30 AM10/12/07
to
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,user_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,user_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

Knut Krueger

unread,
Oct 12, 2007, 6:36:08 AM10/12/07
to
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


Knut Krueger

unread,
Oct 16, 2007, 6:42:20 AM10/16/07
to

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

Christian Kirsch

unread,
Oct 16, 2007, 7:20:02 AM10/16/07
to
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.

Knut Krueger

unread,
Oct 16, 2007, 7:51:31 AM10/16/07
to
Christian Kirsch schrieb:


Ich versuchs nochmal

Tabelle:
data_id,user_id,record_id,marked,copy,selected,user_keys,user_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

Andreas Kretschmer

unread,
Oct 16, 2007, 9:39:56 AM10/16/07
to
begin Knut Krueger schrieb:

> 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.

ROFL.


> Tabelle:
> data_id,user_id,record_id,marked,copy,selected,user_keys,user_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

vereinfachte Tabelle und mit PostgreSQL, ob MySQL das so kann weiß ich nicht.


test=# select * from knut;
uid | rid | file
-----+-----+------
(0 rows)

test=# insert into knut values (1,1,'pdf');
INSERT 0 1
test=# insert into knut (uid, rid, file) select 2, k.rid, k.file from knut k, (select count(1) from knut where uid=2) c where k.uid=1 and c.count=0;
INSERT 0 1
test=# insert into knut (uid, rid, file) select 2, k.rid, k.file from knut k, (select count(1) from knut where uid=2) c where k.uid=1 and c.count=0;
INSERT 0 0
test=# select * from knut;
uid | rid | file
-----+-----+------
1 | 1 | pdf
2 | 1 | pdf
(2 rows)

test=# update knut set file='foo' where uid=1;
UPDATE 1
test=# insert into knut (uid, rid, file) select 2, k.rid, k.file from knut k, (select count(1) from knut where uid=2) c where k.uid=1 and c.count=0;
INSERT 0 0
test=# update knut set file=(select file from knut where uid=1) where uid=2;
UPDATE 1
test=# select * from knut;
uid | rid | file
-----+-----+------
1 | 1 | foo
2 | 1 | foo
(2 rows)


end
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

Claus Reibenstein

unread,
Oct 16, 2007, 10:24:26 AM10/16/07
to
Knut Krueger schrieb:

> Tabelle:
> data_id,user_id,record_id,marked,copy,selected,user_keys,user_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

Knut Krüger

unread,
Oct 16, 2007, 5:50:53 PM10/16/07
to
Claus Reibenstein schrieb:

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

Andreas Krueger

unread,
Oct 17, 2007, 1:09:36 AM10/17/07
to
Knut Krüger <knut.k...@usa.com> 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 a99b...@remote.dyndns.info, die
Replyadresse wird nicht gelesen ! Mails bitte als Nur Text Senden !!
Send Private-Messages only to a99b...@remote.dyndns.info, the reply
adress will not be read ! Please send only as Plaintext !!

Knut Krueger

unread,
Oct 26, 2007, 3:19:33 AM10/26/07
to
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

Claus Reibenstein

unread,
Oct 26, 2007, 4:11:21 AM10/26/07
to
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

Knut Krueger

unread,
Oct 26, 2007, 5:04:26 AM10/26/07
to
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

Bernhard Kleine

unread,
Nov 6, 2007, 6:20:37 AM11/6/07
to

Fehlt da nicht ein komma?
FROM user_data, t2

Bernhard

Andreas Scherbaum

unread,
Nov 6, 2007, 8:25:05 AM11/6/07
to
Claus Reibenstein <4spamm...@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)

Claus Reibenstein

unread,
Nov 6, 2007, 9:18:47 AM11/6/07
to
Andreas Scherbaum schrieb:

> Claus Reibenstein <4spamm...@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

Andreas Scherbaum

unread,
Nov 6, 2007, 2:07:24 PM11/6/07
to

Wunderte mich. Hab zwar nicht im 2003er Standard nachgeschaut aber
in SQL99 war noch explizit "INSERT INTO" definiert.

Claus Reibenstein

unread,
Nov 6, 2007, 3:48:20 PM11/6/07
to
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

Andreas Scherbaum

unread,
Nov 7, 2007, 7:09:09 AM11/7/07
to

----- aus SQL1998 -----

13.8 <insert statement>

Function

Create new rows in a table.

Format

<insert statement> ::=
INSERT INTO { <table reference> | CURSOR <cursor name> }
<insert columns and source>
______________________________________________________________
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.

Claus Reibenstein

unread,
Nov 7, 2007, 8:17:04 AM11/7/07
to
Andreas Scherbaum schrieb:

> Claus Reibenstein <4spamm...@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 statement> ::=
> INSERT INTO { <table reference> | CURSOR <cursor name> }

> [...]
>
> Ich sehe da nicht, das 'INTO' optional wäre, [...]

Ich auch nicht :-)

Danke für die Info.

Gruß. Claus

Knut Krueger

unread,
Nov 12, 2007, 2:33:51 AM11/12/07
to
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


Claus Reibenstein

unread,
Nov 12, 2007, 4:34:18 AM11/12/07
to
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

0 new messages