Suchen
Inside Forum
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > Datenbanken > Datenbanken

Datenbanken Alles rund um MySQL, MariaDB, PostgreSQL o.ä. und die NoSQL-Datenbanken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 14.11.2017, 13:16
mareje mareje ist offline
Engagierter Besucher
 
Registriert seit: 13.04.2007
Beiträge: 259
Standard Relativ einfache SQL-Abfrage - aber ich packs nicht!

Hallo,

ich hab mich mal wieder in irgendetwas verrannt und sehe wahrscheinlich den Wald .... usw nicht. Benötige sicher nur mal einen Wink mit dem Zaunspfahl von euch.

Folg. Tab-Struktur:

tbl_project:
ID | projectname

tbl_time:
ID | description | date | hours |projectID (aus tbl_project)

Es ist eine 1:n Beziehung (ein Projekt hat natürlich viele Zeiteinträge).

Ich möchte einen Report erstellen über einen bestimmten Zeitraum.
Der ist variabel durch Dropdown-Elemente wählbar. Gruppiert (summiert) wird nach Monaten. Zeilenweise aufgelistet nach Projekten.

Ich habe es mit mehrdimensionalen Arrays probiert. Funktioniert aber irgendwie nicht (vielleicht hab ich's auch falsch gemacht).

Wie muss ich hier rangehen? Wie gesagt, ich weiß, dass das simple SQL sein muss. Ich komme nur nicht drauf.

Tausend Dank!
Markus

Geändert von mareje (14.11.2017 um 13:16 Uhr) Grund: Textkorrektur
Mit Zitat antworten
  #2  
Alt 14.11.2017, 13:27
protestix protestix ist offline
Engagierter Besucher
 
Registriert seit: 29.06.2016
Beiträge: 557
Standard AW: Relativ einfache SQL-Abfrage - aber ich packs nicht!

Bei Datenbankproblemen bitte immer den SQL Dump mit dazu schreiben* mit Struktur und einigen Beispieldaten. Bitte gib auch an mit welchem DBMS du arbeitest, ansonsten gehen hier einige von Postgre aus.

Zitat:
Ich habe es mit mehrdimensionalen Arrays probiert. Funktioniert aber irgendwie nicht (vielleicht hab ich's auch falsch gemacht).
Das kannst du wahrscheinlich alles in eine DB Abfrage bringen.

*phpMyAdmin -> export, dann bei output Haken bei "View output as text", danach kannst du mit kopieren und einfügen den Kram hier übertragen.
Mit Zitat antworten
  #3  
Alt 14.11.2017, 16:02
mareje mareje ist offline
Engagierter Besucher
 
Registriert seit: 13.04.2007
Beiträge: 259
Standard AW: Relativ einfache SQL-Abfrage - aber ich packs nicht!

Hallo,

danke für die schnelle Antwort. Ich führe unten mal die Tab-Struktur mit ein paar Daten auf. Musste die Daten noch anonymisieren und hab nur die nötige Tab-Struktur übrig gelassen. Hinzu kommt noch die Liste der Abteilungen, was ja aber auch nur ein zusätzlicher Join ist.

Die Einträge in der Tabelle tbl_projectstep_x sind die Zeiten (in Stunden) an denen Abteilung X (s. Tab. tbl_dept_x) im Monat des entsprechenden Datums (Spalte tbl_projectstep_month Im Format DATE) an dem Project Y (tbl_project_x) gearbeitet hat.

Beim Report soll der Beginn und das Ende des Reports (Jahr) wählbar sein, sodass die Anzahl der Spalten nicht bekannt ist.
Die Zeilen sind die Projekte. Es wird also ausgewertet, wie lange an welchem Projekt pro Monat gearbeitet wurde. Zusätzlich filterbar nach Abteilung. Als letzte Spalte die Gesamtsumme (Zeit für Projekt), als letzte Zeile Gesamtsumme (Zeit) pro Monat über alle Projekte.

Ich dachte zuerst an eine Pivot-Tabelle, aber das ist's irgendwie auch nicht.

Danke für eure Hilfe.

Markus

P.S. Ja - ich benutze noch die alte mySQL-Schreibweise. Das muss nicht kommentiert werden. Danke.

SQL Quellcode:
CREATE TABLE IF NOT EXISTS `tbl_dept_x` (
  `tbl_dept_ID` int(11) NOT NULL AUTO_INCREMENT,
  `tbl_dept_name` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`tbl_dept_ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=7 ;


INSERT INTO `tbl_dept_x` (`tbl_dept_ID`, `tbl_dept_name`) VALUES
(1, 'Dept1'),
(2, 'Dept3'),
(3, 'Dept2'),
(4, 'Dept4'),
(5, 'Dept5'),
(6, 'Dept6');


CREATE TABLE IF NOT EXISTS `tbl_projectstep_x` (
  `tbl_projectstep_ID` int(11) NOT NULL AUTO_INCREMENT,
  `tbl_projectstep_projectID` int(11) NOT NULL COMMENT 'Project - ID aus tbl_project',
  `tbl_projectstep_descrID` int(11) DEFAULT NULL COMMENT 'ID from tbl_projectstepdescr',
  `tbl_projectstep_month` date NOT NULL COMMENT 'date field, required for month + year of project step',
  `tbl_projectstep_deptID` int(11) NOT NULL COMMENT 'Responsible Department',
  `tbl_projectstep_duration` int(4) NOT NULL DEFAULT '0' COMMENT 'Duration in hours',
  PRIMARY KEY (`tbl_projectstep_ID`),
  KEY `tbl_projectstep_projectID` (`tbl_projectstep_projectID`),
  KEY `tbl_projectstep_deptID` (`tbl_projectstep_deptID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=22 ;


INSERT INTO `tbl_projectstep_x` (`tbl_projectstep_ID`, `tbl_projectstep_projectID`, `tbl_projectstep_descrID`, `tbl_projectstep_month`, `tbl_projectstep_deptID`, `tbl_projectstep_duration`) VALUES
(1, 1, 12, '2015-09-01', 1, 21),
(2, 1, 15, '2016-01-01', 1, 30),
(3, 1, 15, '2016-02-01', 1, 27),
(4, 1, 15, '2016-04-01', 1, 30),
(5, 1, 16, '2016-09-01', 1, 45),
(6, 1, 8, '2017-08-01', 1, 5),
(7, 1, 9, '2015-02-01', 2, 220),
(8, 1, 9, '2015-03-01', 2, 26),
(9, 1, 11, '2015-09-01', 2, 60),
(10, 1, 7, '2016-06-01', 2, 6),
(11, 1, 7, '2016-01-01', 2, 20),
(12, 1, 7, '2016-04-01', 2, 45),
(13, 1, 5, '2016-04-01', 2, 15),
(14, 1, 1, '2015-04-01', 3, 45),
(15, 1, 1, '2015-09-01', 3, 10),
(16, 1, 2, '2015-09-01', 3, 50),
(17, 1, 18, '2015-09-01', 4, 5),
(18, 1, 17, '2015-11-01', 4, 30),
(19, 2, 12, '2015-03-01', 1, 10),
(20, 1, 8, '2017-11-01', 1, 5),
(21, 1, 15, '2016-08-01', 1, 22);

CREATE TABLE IF NOT EXISTS `tbl_project_x` (
  `tbl_project_ID` int(11) NOT NULL AUTO_INCREMENT,
  `tbl_project_name` varchar(256) COLLATE latin1_german2_ci NOT NULL,
  PRIMARY KEY (`tbl_project_ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=4 ;

INSERT INTO `tbl_project_x` (`tbl_project_ID`, `tbl_project_name`) VALUES
(1, 'Project 1'),
(2, 'Project 2'),
(3, 'Project 2');

Geändert von mareje (14.11.2017 um 16:03 Uhr) Grund: P.S.
Mit Zitat antworten
  #4  
Alt 15.11.2017, 08:01
mareje mareje ist offline
Engagierter Besucher
 
Registriert seit: 13.04.2007
Beiträge: 259
Standard AW: Relativ einfache SQL-Abfrage - aber ich packs nicht!

Hallo,

ist es doch so kompliziert (was ich mir nicht vorstellen kann) oder antwortet keiner weil die Frage zu doof ist?

Grüße
Mit Zitat antworten
  #5  
Alt 15.11.2017, 10:44
Zeichen32 Zeichen32 ist offline
Engagierter Besucher
 
Registriert seit: 15.12.2009
Beiträge: 953
Standard AW: Relativ einfache SQL-Abfrage - aber ich packs nicht!

Frage alle Zeiten im entsprechenden Zeitraum ab. Joine den Projektnamen usw. dazu. Sortiere dann nach Projekt, so dass jeweils alle Zeiten eines Projekts untereinander stehen.

Gehe dann alle Zeiten durch und führe pro Projekt ein Gruppenbruch durch:
https://php-de.github.io/jumpto/gruppenbruch/

Die Zeiten pro Projekt oder auch insgesamt kannst du in der Foreach Schleife dann zählen, oder du machst dafür eine weitere Query und berechnest es in der Datenbank.

Edit:
Wenn du pro Projekt eine Zeile haben möchtest, dann führe einfach auf Projekt ein GroupBy durch und Rechne die Zeiten in der DB zusammen. Dafür gibt es in MySQL ja die entsprechenden Aggregat Funktionen.
__________________
echo "Zeichen";

Geändert von Zeichen32 (15.11.2017 um 10:46 Uhr)
Mit Zitat antworten
  #6  
Alt 15.11.2017, 11:16
mareje mareje ist offline
Engagierter Besucher
 
Registriert seit: 13.04.2007
Beiträge: 259
Standard AW: Relativ einfache SQL-Abfrage - aber ich packs nicht!

ok, danke.

Ich hatte ja gehofft, dass das mit einem SQL-Statement zu erstellen ist. Aber offensichtlich doch nicht.

Ist ja immer irgendwie auch eine Performance-Frage.
Mit Zitat antworten
  #7  
Alt 15.11.2017, 11:57
Zeichen32 Zeichen32 ist offline
Engagierter Besucher
 
Registriert seit: 15.12.2009
Beiträge: 953
Standard AW: Relativ einfache SQL-Abfrage - aber ich packs nicht!

Abfragen musst du die Daten ja sowie so. PHP übernimmt ja nur noch die Formatierung der Daten.

Wie folgt könntest, du die Daten entsprechend Abfragen, mit dem Gruppen Bruch formatierst du deine Tabelle dann nur noch je nach Spalte.

SQL Quellcode:
SELECT x.tbl_projectstep_projectID, p.tbl_project_name, x.tbl_projectstep_month, x.tbl_projectstep_duration AS duration FROM tbl_projectstep_x x
JOIN tbl_project_x p ON p.tbl_project_ID = x.tbl_projectstep_projectID
GROUP BY x.tbl_projectstep_projectID, p.tbl_project_name, x.tbl_projectstep_month
ORDER BY x.tbl_projectstep_projectID, x.tbl_projectstep_month
__________________
echo "Zeichen";
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Hilfe! Session-Problem seit einigen Tagen und ich packs nicht SchlauFuchs PHP 30 23.11.2009 22:26
Einfache SQL Abfrage funktioniert nicht cyberkuh Datenbanken 5 10.02.2008 23:01
Einfache Funktion aber komme nicht weiter havanna188 PHP 6 25.09.2007 12:16
opensurveypilot Umfrage ich packs nicht ! Anfaenger1 PHP 3 20.04.2007 14:06
einfache if abfrage geht nicht oliver77 PHP 2 24.02.2003 14:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:31 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC