Ich bin ein Neuling in Programmierung und Datenbanken und wäre für einige Hilfe im folgenden Szenario dankbar.
Ich benutze PHP mit SQL Server. Ich baue ein Anwesenheitssystem für Mitarbeiter auf und möchte eine (Pivot-) Tabelle mit Monaten als Zeilen und allen Wochentagsnamen als Spalten (für ein bestimmtes Jahr) erstellen. Die Werte in Zellen sind die Anzahl der Tage (1, 2, 3 ... 31).
Die Hintergrundfarbe der Zelle (bereits als Tabellenspalte vorhanden) gibt die Art des Urlaubs der Mitarbeiter an. Die Tabelle enthält die folgenden Spalten : employee_id, leave_date, leave_type, leave_type_color
.
Ich möchte ein Ergebnis wie das folgende erzielen:
Vielen Dank.
sql-server
php
pivot
Mike T.
quelle
quelle
Antworten:
Der komplexeste Teil davon besteht darin, den Kalender in diesem Format zu erstellen. Das Schwenken und Umgeben mit HTML ist ziemlich einfach. Beginnen wir zunächst mit Ihrer Mitarbeitertabelle mit Urlaubsterminen.
leave_type
schien für das vorliegende Problem nicht relevant zu sein.Das Verfahren, das ich mir ausgedacht habe, sieht folgendermaßen aus (und Warnung: es wird davon ausgegangen
@@DATEFIRST = 7
):Ergebnisse dieses Aufrufs:
Sieh so aus (ich habe an der 7. Tagesspalte angehalten):
Sie müssen den
<table>
/</table>
wrapper selbst hinzufügen , aber so sieht die Ausgabe aus, wenn sie zwischen diese eingefügt und als HTML gespeichert wird (und natürlich können Sie sie mit CSS weiter verbessern):Wenn der Urlaub auf ein Wochenende fällt, übertrifft die Urlaubsfarbe die Wochenendfarbe, aber das ist einfach anzupassen. Ändere das:
Dazu:
Um eine Farbe im Dezimalformat (wie
65280
) in ihr RGB-Äquivalent (00FF00
) zu konvertieren , müssen Sie einige Manipulationen vornehmen. Ich würde in Betracht ziehen, es zunächst als RGB-Hex zu speichern, aber ich habe die Lösung hier mit etwas Ähnlichem aktualisiert:quelle
leave_type_color
Spalte numerisch?Überlegen Sie zunächst, was Sie als Spalten haben möchten, und das ist im Grunde genommen „Woche 1 Tag 1 (So)“, „Woche 1 Tag 2 (Mo)“ bis „Woche 6 Tag 7 (Sa)“. Im Wesentlichen Tag 1-42. Der 1. Januar ist dann „Woche 1 Tag 2“ im Januar. Ich werde diesen WeekPlusDay jetzt anrufen.
Um herauszufinden, wo jeder beginnt, berücksichtigen Sie einfach den Wochentagsteil des Datums.
Ihr Datensatz muss dann nur noch den Wert "WeekPlusDay" enthalten, und Sie zeigen den DayOfMonth an.
quelle