![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 825
|
Hi. In einem CMS hat jede Seite verschiedene Versionen. Diese Seitenversionen liegen in einer MySQL-Tabelle. Jeder Seite sind verschiedene Komponenten zugerdnet. Um nun nicht für jede neue Seitenversion alle Komponenten kopieren zu müssen, würde ich gerne nur die in einer neuen Version veränderten Komponenten kopieren/speichern und bei den anderen Komponenten eben auf die unveränderten Kompoenten-Versionen der letzten Seiten-Versionen zugreifen. Ich brauche also eine Abfrage, die mir zu einer bestimmten Seite alle Komponenten ausgibt, deren Version kleiner oder gleich der Seitenversion ist. Allerdings von jeder Komponente eben nur die Version mit der höchten Versionsnumer <= Seitenversion. Ein Beispiel: Die Startseite hat die Komponenten MlText und News: Startseite: page_id = 1 version = 1 Komponenten: page_id = 1 page_version = 1 component_name = Text component_id = 10 page_id = 1 page_version = 1 component_name = News component_id = 11 Dann wird der Text aktualisiert. Es wird also eine neue Komponente "Text" angelegt. Die neue component_id wäre 25. In der Komponenten-Tabelle hab ich dann drei Datensätze: page_id = 1 page_version = 1 component_name = Text component_id = 10 page_id = 1 page_version = 1 component_name = News component_id = 11 page_id = 1 page_version = 2 component_name = Text component_id = 25 Nun möchte ich eben die Komponenten für die Version 2 auslesen, also Text|25 und News|11: Gib mir alle Datensätze aus page_components, in denen page_id = 1 und version <= 2, aber je component_name nur genau einen Datensatz und zwar den mit dem höchsten Wert in version. MySQL-Version: 5.0 Basti Geändert von Basti (24.11.2006 um 11:14 Uhr). |
| | |
| | Nach oben #2 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Ui, da müsstest du mal mit GROUP BY experimentieren. Ich weiß nicht genau, ob das zusammen mit ORDER BY funktioniert, denn ich glaube, dass es da ein paar Schwierigkeiten gab. Mit GROUP BY kannst du jedenfalls festlegen, dass jeder component_name nur einmal vorkommen soll im Suchergebnis.
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #3 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 825
|
Vielen Dank. Leider komm ich in die richtung nicht wirklich weiter. Das einzige, das ich bis jetzt hinbekommen hab, ist folgendes: Code: SELECT
name,
MAX(id) AS id
FROM
page_components
WHERE
page_id = 1
AND
page_version <= 2
GROUP BY
name
Meine bisherige Lösung ist folgende: Code: SELECT
name,
id
FROM
page_components
WHERE
page_id = 1
AND
page_version <= 2
ORDER BY
page_version
PHP-Code: Die Abfrage wäre dann: Code: SELECT
name,
id
FROM
page_components
WHERE
page_id = 1
AND
page_version >= 2
GROUP BY
name
Basti Geändert von Basti (28.11.2006 um 21:48 Uhr). |
| | |
| | Nach oben #4 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Den Ansatz würde ich sogar unterschreiben
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #5 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 825
|
Problem dabei sind halt de IDs der Komponenten. Jetzt hab ich ein auto_increment-Feld und jede neue Komponente bekommt eben auch eine neue ID von der Seite verpasst. Das ist zumindest bislang der Plan, denn bislang (ohne Versionierung) hab ich die Komponenten selbst ihre IDs schreiben lassen. Ich weiß noch nicht so ganz, was hier ein geschicker Weg ist. Auf der einen Seite möchte ich, dass bei Veränderugen von Seiten auch nur von den Komponenten neue Versionen erstellt werden, die auch wirklich verändert wurden (wobei ich befürchte, dass das garnicht so leicht umzusetzen ist, da mitunter mehrere Komponenten ein und die selbe Tabelle verändern können - so gibt es eine Tabelle "offers" und sowohl auf den Institut-Seiten lassen sich deren Angebote verändern, als auch auf den Angebote-Seiten lassen sich die Institute angeben, die die Leistung anbieten). Auf de anderen Seite, soll die Komponenten-Programmierung so einfach, wie möglich sein. Ich würde die Versionierung dort also gerne weitgehend raushalten. Etwas so: Code: Page an Component: "Gibt es beim aktuellen Request an Komponente x was zu verändern?" Wenn ja: Page: erzeuge neuen Komponenten-Eintrag -> neue ID Page -> Component: "Kopiere Komponente von alte ID nach neue ID" "Bearbeite Komponente mit neuer ID" Basti |
| | |
| | Nach oben #6 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Ui, die Reihenfolge ist aber nicht die Schönste... Was ist denn, wenn jemand eine Veränderung der Seite machen möchte, dann aber doch abbricht? Dann hast du einen Zustand der Seite gleich 2 mal in der DB stehen, sehr unschön. Ich würde eher sagen, dass sobald auf den Speichern-Button gedrückt wird erst der Datensatz erzeugt wird undzwar dann direkt aus den Daten, die geschickt wurden, das erspart auch das Kopieren.
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #7 | ||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 825
| Zitat:
Das Problem ist so, wie es im Moment angedacht ist eben, dass nur die Komponente selbst herausfinden kann, ob der Request was verändern will und das wiedrum ist halbwegs aufwändig bzw. bläht die Komponenten eigetlich unnötig auf. Eine andere Möglickeit wäre, das irgendwie mit Widgets zu lösen, denen ein Zustand zugeteilt wird, der sich beim Sumbit eben verändert (oder auch nicht). Das wäre natürlich das geschickteste, denn dann würde ich die Komponente erst garnicht ansprechen, wenn nichts verändert wurde. Zitat:
Mein Problem ist grad, dass es Komponenten gibt, für die ich gerade keine Versionierung hinbekomme, die sich nicht auf die Seitenversion beziehen, sondern auf z.B. die Gruppe der Seite. Mir fällt nicht recht ein, wie ich das geschickt lösen kann bzw. zumindest dem Benutzer leicht transparent machen kann. ... dicke Gedankenwolken quillen aus meinem Büro. Basti | ||
| | |
| | Nach oben #8 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
Hmm... Ich weiß nicht, ob ich das jetzt richtig verstanden habe, aber wäre es eventuell auch möglich ein BLOB-Feld zu erzeugen, in dem du dann mittels XML + ZIP die alten Versionen speicherst und nur die aktuellste in den Feldern selber lässt? So hast du nach wie vor nur einen Datensatz pro Seite und die aktuellste ist immer im "Vordergrund". Solltest du auf die alten Versionen zugreifen müssen, kannst du das BLOB-Feld auslesen und entsprechend ändern!?
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #9 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 825
|
Ich glaub, das ist nicht wirklich einfacher. Ich habs auch grad auf die beschriebene Methode zumindest für die einfache Text-Komponente hinbekommen: PHP-Code: Im Page_Controller siehts ausgedünnt so aus: PHP-Code: Ich werde das Dingens übrigens, so der Plan, Anfang bis Mitte nächsten Jahres unter einer Public Licence veröffentlichen. Basti |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| MySQL Abfrage Bedingung | julien | Datenbanken | 4 | 06.08.2006 00:44 |
| ssh tunnel zu einer mysql datenbank | beny_mcde | Datenbanken | 4 | 07.06.2006 16:05 |
| MySQL 5.1 kommt in die Beta-Phase | Ben | Nachrichten | 1 | 02.03.2006 14:31 |
| MySQL: Abfrage aus zweiter Tabelle. | Sebastian | PHP-Programmierung | 6 | 16.12.2005 00:01 |
| MySQL Abfrage bei 2 Spalten | Julied64 | Datenbanken | 5 | 06.12.2005 19:05 |