Mirco Schneider: Datum, mit dem in der MySQL-Tabelle, auf existenz überprüfen.

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

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

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

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

        http://www.mysql.com/

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. 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

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

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

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  3. 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

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.