Announcement

Collapse
No announcement yet.

mySQL Revisionen für Datensätze

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mySQL Revisionen für Datensätze

    Hallo,

    Meine Datenbank sieht stark vereinfacht etwa so aus
    Standorte
    Timestamp , ID, Gebäudetyp, Ort, Anschrift, Ansprechpartner-ID

    Ansprechpartner:
    Timestamp, ID, Name, Rufnummer


    Jetzt möchte ich erlauben den Usern (etwa 100) die Daten selber zu ändern die dann sofort sichtbar werden.

    Also hatte ich mir vorgestellt in beide Tabellen ein Feld "Revision" einzufügen.
    Wenn ein Benutzer was ändert wird der Datensatz kopiert und die Revisionsnummer wird erhöht.
    Die ID ist der Primary-key.


    Über PHP werden im Moment einfach alle Daten nach Suchbegriff ausgegeben. Also Düsseldorf gibt alle Standorte in Düsseldorf aus.
    Code:
    SELECT *
    FROM Standort
    WHERE Ort=$Suchbegriff
    Die Ausgabe läuft dann in einer Schleife

    Jetzt hatte ich mir vorgestellt einfach nur den Datensatz mit der höchsten Revision anzeigen zu lassen.

    Also soetwas:?
    Code:
    SELECT * FROM Standort
     WHERE Ort=$Suchbegrif
     GROUP BY ID DESC
    Ich hätte die Möglichkeit die aktuellste Revisionen noch mal anzusehen und z.B die aktuelle Revision wieder zu löschen oder eben die Revision zu übernehmen. Also andere Datensätze löschen und die Revisions-ID wieder auf NULL zu setzen.
    Eventuell sollten die Nutzer auch die Möglichkeit haben die vorherigen Revisionen ansehen zu können falls einer Unfug macht.

    Geht das wie erwartet oder wie kann ich dann die Höchste Revision der Datensätze rausfischen?

    Gibt es ein bessere Idee dort vorzugehen?

  • #2
    select max(rev) from table where ort=$suchbegriff

    Anstatt die rev als Nummer ein Timestamp nutzen
    Christian

    Comment


    • #3
      Was bedeutet "die ausgabe läuft dann in einer Schleife?"
      Kommt nie zurück?
      Oder meinst Du nur eine Ergebnisdarstellung Datensätze aus fetch per Schleife anzeigen

      SELECT * FROM Standort
      WHERE Ort=$Suchbegrif
      GROUP BY ID DESC
      Falls gültiges das SQL sein soll, es ist keins.
      - Vermischung von Sort und Group Syntax
      - Wenn es Group sein sollte, dann ist es vollkommen unzulänglich und gibt dank mysql "arroganter" "Automatik" totalen Blödsinn aus!

      (Be)merkenswert:
      select * from .. group by <ein Feld>
      willst Du niemals in mysql einsetzen, niemals! (aktuelle bzw. gut konfigurierte mysql db werfen dabei einen Fehler aus und das ist gut so; siehe unten)

      Wenn Du etwas höchstes ausgeben willst, musst Du das höchste rausfinden z.B. mit Max, das ist eine sogenannte Aggregat Funktion. Der Einsatz dieser Funktion benötigt sehr häufig die Verwendung von Group... hier sind alle Felder zu nennen, die nicht per Aggregat Funktion ausgegeben werden.
      Sind die Maxima gefunden, müssen sie zur Einschränkung der Ausgabe verwendet werden.

      So ein Mechanismus ist relativ aufwändig.
      Einfacher wäre ein Flag "Anzeigen". Alles was auf "Anzeigen" steht, wird durchsucht und ausgegeben. Das können im allereinfachsten Fall sogar mehrere Revisionen sein. Besser wäre natürlich die Highlander Variante, "es kann nur einen geben". Dafür gibt es verschiedene Wege, das zu erreichen. Noch besser wäre vielleicht, diese Darstellung und Logik Nutzer abhängig zu machen. "Wichtige" Leute dürfen mehr sehen als "Greenhorns".
      Gruß, defo

      Comment

      Working...
      X