online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon isset vom 11.01.2019, 08:56 Options

sql hilfe

hy leute,
also mein problem: ich habe 10 tabellen die ihre id (Primärschlüssel) zu einer "haupt" tabelle schicken sollen. (wenn etwas eingetragen wird)
benutzernamen werden auch an die haupttabelle geschickt.
ich möchte nun das jeder benutzer jede id der tabellen zugeordnet bekommt.


mein sql command:

"INSERT INTO Haupttabelle (Benutzerid FROM Benutzer.Benutzerid, Tableid FROM tabelle.tebellenid) "

habs auch so versucht

"INSERT INTO Haupttabelle (Benutzerid, Tabellenid) VALUES (Benutzer.Benutzerid, Tabelle.Tabellenid) "


geht leider nichts :(
bitte um eure hilfe


Antwort schreiben

Antwort 1 von disco vom 11.01.2019, 09:20 Options

moin

du hast da einen ziemlich großen denkfehler.
Benutzer.Benutzerid und Tabelle.Tabellenid sind bezeichnungen ganzer spalen einer tabelle und nicht der inhalt einer einer zelle, bzw. ein wert. du gibst also nicht an welchen wert (fremdschlüssel) du eintragen möchtest.

kurz du musst richtige werte angeben

"INSERT INTO Haupttabelle (Benutzerid, Tabellenid) VALUES ("0815", "20005") "

natürlich sollten diese werte aus variablen (je nach programmoersprache kommen)

g,
disco

Antwort 2 von b1n4ry0utl4w vom 11.01.2019, 09:38 Options

Hallo,
richtig müsste das so aussehen:

INSERT INTO Haupttabelle (Select a.Benutzerid, b.Tableid FROM Benutzer a, tabelle b)


(a und b könne frei gewählt werden)

das Einschreiben der Daten würde ich über einen ON INSERT -Trigger realisieren das Ändern dann mit einem ON UPDATE Trigger.
Welches DB-System nutzt du eigentlich? Da kann ich dann etwas näher drauf eingehen.

MfG
b1n4ry0utl4w

Antwort 3 von isset vom 11.01.2019, 09:39 Options

hmmm, hast recht ; )

nur, wie soll ich das dann automatisieren????
ich kann ja nicht (es gibt 30 user)
30 mal hintereinander einen insert befehl ausführen sodas name in die tabelle eingefügt wird :(

Antwort 4 von isset vom 11.01.2019, 09:39 Options

außerdem thx für unterstützung

Antwort 5 von b1n4ry0utl4w vom 11.01.2019, 09:52 Options

Hallo,
mit diesem Befehl werden alle Benutzer und Tabellen miteinander verknüpft und reingeschrieben (also genau das was du willst). Du kannst die Unterabfrage auch variieren (also einzeln testen was rauskommt und dann noch WHERE-Bedingung,... hinzufügen).

MfG
b1n4ry0utl4w

PS: Du hast immer noch nicht dein DB-System gesagt

Antwort 6 von isset vom 11.01.2019, 10:16 Options

also es ist eine orakel db.
lg isset

Antwort 7 von b1n4ry0utl4w vom 11.01.2019, 10:26 Options

Hallo,

dann schau mal hier . Das ist bei Oracle nicht ganz so trivial, Aber die Trigger funktionieren so wie ich gesagt habe.

MfG
b1n4ry0utl4w

Antwort 8 von isset vom 11.01.2019, 11:03 Options

k, thx einmal jetzt funkt di abfrage mit select

INSERT INTO Anzeigen (Select a.Benutzerid, b.Kraftwid FROM Benutzer a, Kraftwerk b )


aber einfügen kann ich noch immer keine daten :( irgendwie komisch oder???

Antwort 9 von b1n4ry0utl4w vom 11.01.2019, 11:08 Options

Hallo,
was passiert wenn du die komplette Abfrage ausführst,also:
INSERT INTO Anzeigen Select a.Benutzerid, b.Kraftwid FROM Benutzer a, Kraftwerk b 
?
Fehlermeldung, o.ä.? Schreibt er gar nix in die Tabelle oder was falsches?

MfG
b1n4ry0utl4w

Antwort 10 von isset vom 11.01.2019, 11:12 Options

es kommt immer ORA 00947 not enough values

Antwort 11 von b1n4ry0utl4w vom 11.01.2019, 11:14 Options

Hallo,
du hast mehr als 2 Spalten in der Tabelle Anzeigen, das wusste ich nicht. Der richtige Code müsste heißen:

INSERT INTO Anzeigen(Benutzerid,Kraftwid) Select a.Benutzerid, b.Kraftwid FROM Benutzer a, Kraftwerk b


MfG
b1n4ry0utl4w

Antwort 12 von isset vom 11.01.2019, 11:20 Options

hey alter du hast es echt drauf :)
1000 dank


es funktioniert

Antwort 13 von isset vom 11.01.2019, 11:27 Options

falls es dich noch interessiert hab noch bedingung hinzugefügt (KwVar ist eine Variabel damit ich nur neue Beiträge hinzufüge)


INSERT INTO Anzeigen(Benutzerid,Tableid) Select a.Benutzerid, b.Kraftwid FROM Benutzer a, Kraftwerk b WHERE b.Kraftwid = ´" & KwVar & "´"

nochmals thx

Antwort 14 von gamex vom 11.01.2019, 12:15 Options

Nur so eine kleine Anmerkung... der SELECT-Befehl für das INSERT-Statement wird wahrscheinlich zu viele Werte liefern. Der liefert nämlich alle Kombinationen von Benutzer.Benutzerid und Kraftwerk.Kraftwerkid.

Bsp.:
Benutzer enthält die BenutzerIds 1,2,3
Kraftwerk enthält die KraftwerkIds 10,11,12

Der Select-Befehl liefert dann folgende Datensätze:
[1,10]
[1,11]
[1,12]
[2,10]
[2,11]
[2,12]
[3,10]
[3,11]
[3,12]
...also bereits 9 Datensätze, obwohl davon sicherlich nicht alle Sinn machen, schließlich hat nur ein Benutzer die neue Kraftwerk-ID angelegt. Außerdem will ich ja bei einem Trigger-Ereignis nur die neu angelegte ID eintragen.

Selbst die Einschränkung mittels

WHERE b.Kraftwid = ´" & KwVar & "´"

liefert noch zu viele Datensätze, denn es wird dennoch für jeden Benutzer ein Eintrag in der Haupttabelle gespeichert.

Meine bescheidene Meinung: die BenutzerId für das Insert-Statement muss von der Anwendung kommen (die den Login o.ä. durchgeführt hat), denn nur dort ist die richtige BenutzerId bekannt. Die neueste ID könnte z.B. per Max(KraftwerkId) abgefragt werden, falls das ein Auto-Increment ist.

Dennoch frage ich mich, warum man eine Spalte haben will, in der alle jemals eingefügten IDs anderer Tabellen drin sind. Macht nur Sinn, wenn ich pro Fremd-Tabelle eine Spalte habe (denn was nutzt mir die Info "12", wenn ich nicht weiß, welche Tabelle gemeint ist) oder pro Fremdtabelle genau eine Zeile.

P.S.: Ich hoffe, die Kraftwerk-Id ist jetzt kein Atomkraftwerk, dessen Sicherheitssystem über o.a. SQL-Befehle gesteuert wird...

Antwort 15 von isset vom 11.01.2019, 12:44 Options

:) nein ist kein atomkraftwerk, :)

ich kann dir mein problem erläutern:
also ich hab wie du schon richtig vermutet hast ein login system mit 30 user. es gibt insgesammt 10 tabellen zb kraftwerk in der daten abgelegt sind.

wenn eine datei abgespeichert wird müssen andere user diesen beitrag lesen und über einen button eine lese bestätigung durchführen so das zu 100% sicherheit jeder user weiß um welchen eintrag es sich handelt. (um missverständnisse zu beseitigen)

dadurch das jeder benutzer jeden eintrag bestätigen muss ist mir leider nur diese eine möglichkeit in den sinn gekommen. sie ist zwar nicht elegant aber sie funktioniert :)

falls du verbesserungsvorschläge oder eine andere idee hast nur zu :)
ich mach sowas nämlich zum ersten mal
lg isset

Antwort 16 von isset vom 17.01.2019, 08:33 Options

hy,
ich hab nun folgendes problem, da di ids aus den unterschiedlichen tabellen gleich sind kann ich gewisse lesevorgänge nicht mehr durchführen da mein programm nicht mehr weiß aus welcher tabelle der eintrag stammt.
ich habe nun noch eine 3. spalte in anzeigen eingefügt. hier soll der name der tabelle plaziert werden, könnte mir wer mit mysql befehl helfen?????

alter text:
.CommandText = "INSERT INTO Anzeigen(Benutzerid,Tableid) Select a.Benutzerid, b.Kraftwid FROM Benutzer a, Kraftwerk b

es sollte halt bei dem ergbnis mit diesen command text noch die spalte tbn mit "kraftwerk" gefüllt werden

Ähnliche Themen

kommentare in sql datenbank
soad  04.01.2007 - 119 Hits -

sql laufwerk
micky01  21.02.2007 - 109 Hits -

SQL Variablen zuweisung
ichhabeinefrage  03.08.2007 - 255 Hits - 6 Antworten

Gesucht, Programm für Datenbank Modelierung
Dr.Ma-Busen  02.06.2008 - 102 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026