Datum, mit dem in der MySQL-Tabelle, auf existenz überprüfen.
Mirco Schneider
- php
Mahlzeit Forum,
ich habe ein Formular mit dem ich ein beliebiges Datum mit seinem
Event in eine Datenbank schreiben kann.
Allerdings sollte nun geprüft werden, ob das einzutragende Datum
in der jeweiligen Datenbank schon existiert.
Ich möchte schließlich nicht, dass meine Events überschrieben werden.
MySQL Tabelle:
--------------
id - int
datum - date
event - text
Welche Möglichkeiten habe ich das Datum mit dem jeweiligen
Datum in der Datenbank zu vergleichen?
Danke für Eure Hilfe.
Mirco
Hi,
Allerdings sollte nun geprüft werden, ob das einzutragende Datum
in der jeweiligen Datenbank schon existiert.
das macht man mit einem UNIQUE-Constraint im DB-Schema.
Cheatah
Hi Cheatah,
Allerdings sollte nun geprüft werden, ob das einzutragende Datum
in der jeweiligen Datenbank schon existiert.das macht man mit einem UNIQUE-Constraint im DB-Schema.
Kann man das auch über die Datenbank prüfen, wenn man kein Unique Index angelgt hat, oder bedeutet UNIQUE-Constraint, das das auch auf ein nicht indiziertes Feld anwendbar ist?
Wie findet man da schnell mehr input?
Grüße
Tom
Hi,
Kann man das auch über die Datenbank prüfen, wenn man kein Unique Index angelgt hat, oder bedeutet UNIQUE-Constraint, das das auch auf ein nicht indiziertes Feld anwendbar ist?
wie MySQL das handhabt, weiß ich nicht. Prinzipiell macht ein UNIQUE INDEX aber sehr viel Sinn, weil die Datenbank ja bei jedem INSERT oder UPDATE auf die Spalte die gesamte Tabelle überprüfen muss, was ohne Index recht lange dauern kann.
Wie findet man da schnell mehr input?
Cheatah
Hallo,
ich habe ein Formular mit dem ich ein beliebiges Datum mit seinem
Event in eine Datenbank schreiben kann.
Neuen Eintrag schreiben:
http://www.mysql.com/doc/de/HANDLER.html
http://www.mysql.com/doc/de/REPLACE.html
Allerdings sollte nun geprüft werden, ob das einzutragende Datum
in der jeweiligen Datenbank schon existiert.
Wenn ja - was soll passieren?
Um zu schauen, ob es einen solchen Eintrag gibt.
SELECT id FROM Tabelle WHERE datum='$datumneu'
Ich möchte schließlich nicht, dass meine Events überschrieben werden.
Darf es nur ein einziges Event pro Tag geben?
Dann ist (theoretisch) die Spalte id ja ueberfluessig,
weil das Datum unique ist.
Wenn Du mehrere Eintraege haben kannst, dann sehe ich
das Problem nicht.
INSERT INTO Tabelle SET datum='$neudatum' event='$eventbeschreibung'
loescht ja ueberhaupt nichts, sondern erzeugt eine neue Zeile mit einer neuen ID.
Bitte beschreibe nochmal genau, was Du willst, wieviele Events pro Tag moeglich
sind und was an der Geschichte nicht klar ist.
Gruesse,
Thomas
Hallo Thomas,
Wenn ja - was soll passieren?
z.B. in Datenbank ist folgender Eintrag vorhanden:
2003-12-12 Disco
Aus versehen, da ich vergessen habe, dass an diesem
Tag bereits Disco sattfindet, habe ich im Formular am
2003-12-12 Brunch eingetragen. Nun existieren zwei Events
am gleichen Tag. Dies darf nicht sein.
Es sollte überprüft werden: ist an diesem Tag bzw. Datum
ein Event, wenn ja dann Meldung -> geht nicht.
Darf es nur ein einziges Event pro Tag geben?
Dann ist (theoretisch) die Spalte id ja ueberfluessig,
weil das Datum unique ist.
ok, so ist es.
Wenn Du mehrere Eintraege haben kannst, dann sehe ich
das Problem nicht.INSERT INTO Tabelle SET datum='$neudatum' event='$eventbeschreibung'
Bis dato habe ich es genau so gelöst. Dies ist aber nicht
gewünscht.
Bitte beschreibe nochmal genau, was Du willst, wieviele Events pro Tag moeglich
1 Event pro Tag.
Bitte um Hilfe dieses Problem aus der Welt zu schaffen.
Danke Euch.
Gruesse,
Mirco
Halihallo Mirco
Bitte beschreibe nochmal genau, was Du willst, wieviele Events pro Tag moeglich
1 Event pro Tag.
id weg. Neuer PRIMARY KEY ist date. Oder behalte id falls nötig und definiere einen
UNIQUE-Index auf das Attribut date; wie bereits vorgeschlagen wurde.
Viele Grüsse
Philipp
Halihallo Mirco
ich habe ein Formular mit dem ich ein beliebiges Datum mit seinem
Event in eine Datenbank schreiben kann.
Allerdings sollte nun geprüft werden, ob das einzutragende Datum
in der jeweiligen Datenbank schon existiert.
Warum?
Ich möchte schließlich nicht, dass meine Events überschrieben werden.
Dann ist das Datenschema nicht richtig umgesetzt. Entweder du identifizierst einen
Event über sein Datum und dann gibt es eben nur ein Event/Tag, oder du identifizierst
ihn über eine ID und lässt (ohne UNIQUE Constraint) mehrere Events pro Tag zu.
Bei einem INSERT wird jedoch _nie_ irgendetwas überschrieben.
MySQL Tabelle:
id - int
datum - date
event - text
Ich nehme an, id ist der Primary Key. Warum soll der eine Event dann einen anderen
überschreiben?
Welche Möglichkeiten habe ich das Datum mit dem jeweiligen
Datum in der Datenbank zu vergleichen?
Nur über eine zweite Abfrage ohne UNIQUE-Constraint; mit UNIQUE-Constraint wird die
Datenbank das Einfügen verweigern.
http://www.mysql.com/doc/en/Constraints.html. Zur Zeit braucht MySQL zwingend
einen UNIQUE-Index für den UNIQUE-Constraint. Mehr noch: Der UNIQUE-Constraint ist IMHO
nur über einen UNIQUE-Index definiert.
Viele Grüsse
Philipp