AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Duplexcheck in Tabelle

Ein Thema von stho · begonnen am 27. Aug 2010 · letzter Beitrag vom 30. Aug 2010
Antwort Antwort
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#1

SQL-Duplexcheck in Tabelle

  Alt 27. Aug 2010, 06:54
Datenbank: MySQL • Version: 5,1 • Zugriff über: -
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
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: SQL-Duplexcheck in Tabelle

  Alt 27. Aug 2010, 07:02
hi,

hast du auch einen entsprechenden Index (unique) auf die zu prüfenden Spalten gelegt?
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#3

AW: SQL-Duplexcheck in Tabelle

  Alt 27. Aug 2010, 07:12
vielen dank schonmal das mir jemand um diese uhrzeit antwortet

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
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#4

AW: SQL-Duplexcheck in Tabelle

  Alt 27. Aug 2010, 07:29
versuch mal, einen unique index auf die spalte1 und spalte2 zu legen, dann müsste eigentlich der update-teil ausgeführt werden
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#5

AW: SQL-Duplexcheck in Tabelle

  Alt 27. Aug 2010, 07:40
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



Vielen vielen tausend dank!!!
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: SQL-Duplexcheck in Tabelle

  Alt 27. Aug 2010, 08:56
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.
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#7

AW: SQL-Duplexcheck in Tabelle

  Alt 30. Aug 2010, 06:32
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...
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
533 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: SQL-Duplexcheck in Tabelle

  Alt 30. Aug 2010, 07:51
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.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#9

AW: SQL-Duplexcheck in Tabelle

  Alt 30. Aug 2010, 10:42
also, ich habe es jetzt nochmal mit mysql getestet. Lege eine Tabelle mit folgendem DDL an

SQL-Code:
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 ;
Führe jetzt dieses SQL aus:
Code:
INSERT INTO Tabelle (Spalte1, Spalte2, Spalte3) VALUES (3, 18, 12)
ON DUPLICATE KEY UPDATE Spalte3 = Spalte3 + 12
es wurde ein neuer Datensatz eingefügt. Jetzt nochmal ausführen => der bereits angelegte Datensatz wurde aktualisiert.

Warum? Es existiert ein "Unique Key" auf den Spalten 1 & 2.

Geändert von mkinzler (30. Aug 2010 um 10:56 Uhr) Grund: Code-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#10

AW: SQL-Duplexcheck in Tabelle

  Alt 30. Aug 2010, 10:54
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!!!


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

Geändert von stho (31. Aug 2010 um 05:59 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz