![]() |
Datenbank: MySQL • Version: 5,1 • Zugriff über: -
SQL-Duplexcheck in Tabelle
Hallo leute
Ich habe ein kleines Problem was ich mit Hilfe von Google & Co. nicht gelöst bekomme... :-( Ich habe eine Tabelle (Tabelle X) mit verschiedenen Spalten (ID als Autoincrement-> Spalte0, Spalte1, Spalte2, Spalte3) Nun will ich das altbekannte Spielchen spielen: Wert adieren wenn Eintrag schon vorhanden, ansonsten anlegen Dazu habe ich folgenden Code benutzt: --- INSERT INTO Tabelle (Spalte1, Spalte2, Spalte3) VALUES (3, 18, 12) ON DUPLICATE KEY UPDATE Spalte3 = Spalte3 + 12 --- Nun legt er mir jedes mal einen neuen Eintrag an wenn ich das ausführe. Ich weiß, das liegt am Autoincrement (er entdeckt also keinen duplex) Wie schaffe ich es trotzdem das er nur die duplikate in bestimmten Spalten prüft? Sprich: -> Als Duplex erkennen wenn Spalte1 und Spalte2 schon vorhanden sind? Währe schön wenn ihr mir helfen könntet |
AW: SQL-Duplexcheck in Tabelle
hi,
hast du auch einen entsprechenden Index (unique) auf die zu prüfenden Spalten gelegt? |
AW: SQL-Duplexcheck in Tabelle
vielen dank schonmal das mir jemand um diese uhrzeit antwortet :thumb:
naja, jeder eintrag ist an und für sich unique weil die ID sich jedes mal automatisch erhöht... :-( Jedoch würde ich gerne wissen wie und ob man die bedingungen für einen duplex festlegen kann |
AW: SQL-Duplexcheck in Tabelle
versuch mal, einen unique index auf die spalte1 und spalte2 zu legen, dann müsste eigentlich der update-teil ausgeführt werden
|
AW: SQL-Duplexcheck in Tabelle
hab jetzt aufspalte 1 und spalte 2 einen primärschlüssel gesetzt und die auto-ID (spalte 0) raus gelöscht...
Es funktioniert! :-) Absolut geil :-D :thumb: :thumb: :thumb: Vielen vielen tausend dank!!! |
AW: SQL-Duplexcheck in Tabelle
hm, so meinte ich das eigentlich nicht ;)
du solltest keinen Primär, sondern einen Unique-Index auf die beiden Spalten legen. Man kann durch aus mehrere Indizes pro Tabelle anlegen. Ich war zwar jetzt im Kopf bei FB, aber MySQL kann das mit Sicherheit auch ;) und die autoIncrement-Spalte würde ich auch wieder einfügen und als Primärindex nehmen. |
AW: SQL-Duplexcheck in Tabelle
so, ich bins nochmal...
leider hat sich nach einiger zeit (deshalb schreibe ich erst jetzt) herausgestellt das das was ich gemacht habe NICHT wirklich das ist was ich möchte ^^ und selbst das mit dem unique-index ist keine wirkliche lösung... aber ich glaube es liegt einfach daran das ich mein problem nicht anständig genug geschildert habe... Spalte 1 (Enthällt eine Benutzer-ID) Spalte 2 (Enthällt die ID einer Beschreibung) Spalte 3 (Enthällt den Wert der dahinter steht) Nun soll die Kombination aus Spalte 1 und 2 unique sein... Es ist aber nicht klar ob Benutzer X (Spalte1) einen Wert (Spalte 3) vom Typ Y (Spalte 2) hinterlegt hat. Wenn er dies getan hat soll der Wert einfach addiert werden, ansonsten soll der Eintrag angelegt werden. Und so wie ich es bisher gemacht habe scheint es nicht zu funktionieren :-( Ich kann entweder einen Primärschlüssel auf Spalte 1 oder auf Spalte 2 legen... Aber nicht beide... |
AW: SQL-Duplexcheck in Tabelle
Es gibt zusammengesetzte Primärschlüssel. Das ist vermutlich das was Du suchst.
Ich würde aber grundsätzlich davon abraten fachliche Felder als PK zu verwenden. Weder einzeln noch zusammengesetzt. Hier einfach eine Tabellen ID nehmen. PK, Autoincrement das ist alles. Wir nehmen bei einigermassen komplexen Strukturen sogar Datenbankweite Unique PK's. Das ist teilweise eine Art glaubensfrage. Aber irgendwann wirst Du bei einer Erweiterung an die Grenzen fachlicher PK' stossen. Dazu gibt's hier im Forum wie auch anderswo verschiedene Threads. |
AW: SQL-Duplexcheck in Tabelle
also, ich habe es jetzt nochmal mit mysql getestet. Lege eine Tabelle mit folgendem DDL an
SQL-Code:
Führe jetzt dieses SQL aus:
CREATE TABLE IF NOT EXISTS `testtable` (
`ID` int(11) NOT NULL AUTO_INCREMENT, `Spalte1` int(11) NOT NULL, `Spalte2` int(11) NOT NULL, `Spalte3` int(11) NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `UQ_1_2` (`Spalte1`,`Spalte2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ;
Code:
es wurde ein neuer Datensatz eingefügt. Jetzt nochmal ausführen => der bereits angelegte Datensatz wurde aktualisiert.
INSERT INTO Tabelle (Spalte1, Spalte2, Spalte3) VALUES (3, 18, 12)
ON DUPLICATE KEY UPDATE Spalte3 = Spalte3 + 12 Warum? Es existiert ein "Unique Key" auf den Spalten 1 & 2. |
AW: SQL-Duplexcheck in Tabelle
Leute, ihr seid klasse :-)
Hier kann ich noch richtig was lernen ^^ Vielen tausend dank für eure Hilfe, probiere das heute abend wenn ich zuhause bin mal aus :-) Danke danke danke!!! :thumb: EDIT: Achja, hab vergessen zu erwähnen das man eure Erklärung (mit Beispiel) wunderbar verstehen kann :-) EDIT2: ES KLAPPT!!!! *mega freu* Tausend dank euch beiden nochmal :-) Jetzt hab ich wieder was gelernt!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz