Terminüberschneidung (Positionsangabe)
Anja
- datenbank
Hallo, ich habe folgendes Problem, ich möchte in einem Jahreskalender Balken anzeigen lassen, die sich je nach Überschneidung, rechtsbündig an die richtige Position legen.
so sieht das im Moment aus, ich mache jeden Tag folgenden DatenbankSelect
[ID|bezeichnung|start|end]
SELECT
A.ID,
COUNT(*) AS `Ueberschneidung`
FROM
`termine` AS A,
`termine` AS B
WHERE
B.end > A.start
&& A.end > B.start
&& A.ID != B.ID
GROUP BY A.ID
was mir aber nicht die Position ausgibt, sondern nur die Überschneidungs-Menge
Wenn ich nen Array hätte wo zu jeder ID eine Sortierungsnummer ausgegeben wird, wäre das perfekt.
z.B am 25.8.2010 gibt es 2 Überschneidungen:
[ID|Sort]
[1|1]
[2|2]
die Position für ID 2 muss er aber beibehalten damit die Balken am Anfang und am Ende immer stimmen
Nimm doch die ID selbst als Sortierung. Damit hast du an Tagen mit gleichbleibenden Terminen die einzelnen Balken immer in der selben Reihenfolge.
Es wird natürlich schon noch Optimierungen geben, z.B. wärs schön wenn ein längerer Termin immer ganz am Rand steht, so dass möglichst keine Lücken (nach rechts hin gesehen) entstehen.
Hello,
Nimm doch die ID selbst als Sortierung. Damit hast du an Tagen mit gleichbleibenden Terminen die einzelnen Balken immer in der selben Reihenfolge.
Es wird natürlich schon noch Optimierungen geben, z.B. wärs schön wenn ein längerer Termin immer ganz am Rand steht, so dass möglichst keine Lücken (nach rechts hin gesehen) entstehen.
Dachte ich auch gerade und musste feststellen, dass mein Algorithmus für die Daratellung von nicht überschneidenden Terminen sich nicht so leicht auf dieses Problem umschrteiben lässt...
Außerdem ist die Granularrität noch eines meiner Probleme dabei. Ich habe für die Darstellung eine stündliche Granularität gewählt. Das bläst das Array schon ganz schön auf. Eine zweite Schicht einzuführen, ist da schon ein Hammer...
Es muss sicherlich eine bessere Möglichkeit geben.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ein Optimierungsalgorithmus würde hier sicher das beste Ergebnis bringen. Ich denke da erst mal an durchprobieren aller Möglichkeiten pro Monat. Das kann dann vielleicht noch optimiert werden, damit es nicht ganz so ineffizient wird.
Am 27. August rücken zwei Balken nach rechts. Sind das jetzt neue Balken oder die alten, nur versetzt?
Idee (ich gehe von einem Urlaubskalender aus):
Betrachte nicht den einzelenen Tag, sondern einen ganzen Monat. Den ersten und letzten Tag des Urlaubseintrags gibt dir die min / max Funktion. Wenn min im Vormonat, nimm den Ersten, wenn max im nächsten Monat, den letzten Tag des Monats.
Dann kannst du die Balken (als gefärbtes div oder Grafik) rechtsbündig anlegen und hast keine Brüche in den Balken. Die Höhe in Pixel kennst du ja, da der Kelender offenbar eine Grafik ist. Sonst nimm die Höhe in em.
Gast