SQL Abfrage aus mehreren tabellen inclusive SUM

SpiderZLS

Mitglied
Hi, ich bräuchte bitte einmal hilfe wo ich hier etwas übersehe bzw. wie der SQL Aufruf klappen würde.

Meine DB schaut wie folgt aus : Name der DB ist zeit

Tabelle 1: time_data
time_id , user_id , data_date , type_id , hours , hinweis

Tabelle 2: time_periods
period_id , start_date , end_date

Tabelle 3: time_types
type_id , beschreibung , hour

Tabelle 4: user_info
user_id , username , g_id





Wenn ich aber nun per PhpMylAdmin den folgenden Befehl ausführen möchte


SELECT * FROM `time_periods`, `time_types` , `user_info` , `time_data` , SUM(`time_data.hours`) as timesum WHERE user_info.user_id = time_data.user_id AND time_types.type_id = user_info.g_id AND user_info.user_id = 23


erhalte ich die Meldung

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SUM(`time_data.hours`) as timesum WHERE user_info.user_id = time_data.user_id AN' at line 1

Ich verstehe im mom. nicht ganz wo der Fehler liegt und wäre für Hilfe und Lösungen sehr dankbar ;)
 
phpMyAdmine - Ergo eine MySQL-Datenbank.
Immer mitangeben umwas für eine DB es sich handelt, denn SQL ist nicht gleich SQL

Ich habe mal dein SQL durch einen Formatter gejagt um es lesen zu können
SQL:
SELECT
    *
FROM
    `time_periods`,
    `time_types`,
    `user_info`,
    `time_data`,
    SUM(`time_data.hours`) AS timesum
WHERE
    user_info.user_id = time_data.user_id
    AND time_types.type_id = user_info.g_id
    AND user_info.user_id = 23;
So ganz ehrlich gesagt, ist hier nicht nur ein Hund begraben, das ist ein Massengrab...

item Ein SUM() ist KEINE Quelle. Hat also nix im FROM zu suchen sondern im SELECT

item Für ein SUM() braucht man ein GROUP BY

item Für einen GROUP BY im SELECT immer alle Felder ausgebe die man sehen möchte. Ein GROUP BY auf ein * macht meistens keinen Sinn, da eine ID mit drin ist und dann wird nix gruppiert

Also, überlege dir mal genau, wie du die Daten zusammenfassen willst. Dann erstenne den GROUP BY darüber mit der SUM()

Noch ein Tipp:
Auch in PHPund phpMyAdmin solltest du die SQLs formatieren. Fehler findet man in formatierten SQLs viel schneller als in den unlesbaren Einzeilern.
Siehe dazu auch http://wiki.yaslaw.info/dokuwiki/doku.php/php/tutorials/sqlreadable
 
Hi Yaslaw ,
ich habe da gerade etwas Kopfschmerzen.. ;) *lach* und stehe nun völlig auf dem Schlauch...

Wie wäre denn dann der Aufruf richtig ? um alle Informationen aus den entsprechenden Tabellen zu erhalten incl. der SUM aus der tabelle "time_data.hours" ?? ich Verstehe es derzeit einfach nicht... ;)
 
Wie wäre denn dann der Aufruf richtig ? um alle Informationen aus den entsprechenden Tabellen zu erhalten incl. der SUM aus der tabelle "time_data.hours" ?? ich Verstehe es derzeit einfach nicht... ;)

Ja wie jetzt. Die Summe über was? Einfach über alle Datensätze?
Oder die Summe pro User? Oder Pro Type? Oder pro User-Type Kombination?

Am besten beschreibst du mal, was du mit dem SQL bewirken willst. Dann können wir dir eher helfen. Denn aus deinem SQL ist absolut nicht herauslesbar was du willst.
 
Also der Hintergrund für mein "Konstrukt" war das ich im moment jede der 4 Tabellen einzeln aufrufe , was auch super klappt.
Ich dachte mir nur das man die 5 einzelnen Aufrufe auch in einen Aufruf verpacken könnte.
Ich wollte aus der tabelle 1 "time_data" die Summe vom Feld "hours" mit in den einen Aufruf verpacken.

In meinem einen SQL Aufruf von meinen derzeit 5 schaut das so aus

SQL:
SELECT
SUM(hours)
as
sumhours from time_data

in dem Feld "hours" der tabelle "time_data" stehen stunden Werte drinnen die ich mit SUM alle zusammen gerechnet haben wollte um sie anzuzeigen, wie aus meinem kompletten SQL Statement ersichtlich möchte ich das ganze für einen bestimmten user haben und brauche daher auch informationen aus den anderen tabellen ;)

Ich hoffe ich habe das halbwegs verständlich ausgedrückt

hier mal der aufbau der tabelle time_data

Unbenannt.PNG

Die Summe aller Datensätze in dieser Tabelle die aus dem Jahre 2015 sind.
 
Zurück