 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
01.06.2008, 22:36
|
#1
|
|
TP-Junior
Registriert seit: Apr 2008
|
SQL, spinnt mein Group By?
Hi
Ich baue sone kleine Intranet-Buchhaltungs Anwendung (ähnlich wie Quicken). Nun möchte ich eine Übersichtsseite, welche mir pro Ausgabenkategorie die Ausgaben angibt. Dabei soll immer alles schön in ein Kästchen pro Konto gepackt werden. Also über einem Kästchen steht dann "Ausgaben für Konto Deutsche Bank: " mit dem Total für alle Ausgaben, für eine bestimmte Kategorie, welche von diesem Konto getätigt wurden. Im Kästchen selber stehen dann die einzelnen Transaktionen. Mit dem Teil im Kästchen habe ich kein Problem, lediglich mit der Titelzeile, welche das Total für alle Transaktionen anzeigen soll. (Dabei sind die Kategorien soweit maximal zweistufig, das heisst es gibt eine Hauptkategorie und n Unterkategorien, aber nur eine Ebene. Die eigene Kategorien ID ist CategoryID, und falls die Kategorie Unterkategorie ist, ist der ParentID Wert != 0).
Dies gibt mir immer 0 Datensätze zurück, keine Ahnung wieso:
Code:
SELECT SUM( t.Amount ) AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
FROM Transactions AS t
LEFT JOIN Categories AS c ON t.CategoryID = c.CategoryID
LEFT JOIN Accounts AS a ON t.AccountID = a.AccountID
GROUP BY t.accountid
HAVING c.categoryid =34
OR c.parentid =34
Wenn ich das ganze so eingebe:
Code:
SELECT SUM( t.Amount ) AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
FROM Transactions AS t
LEFT JOIN Categories AS c ON t.CategoryID = c.CategoryID
LEFT JOIN Accounts AS a ON t.AccountID = a.AccountID
GROUP BY t.accountid
HAVING c.categoryid =34
OR c.parentid =34
erhalte ich dieses Resultat:
HTML-Code:
t_amount, AccountID, a_name, ParentID, UserID, CategoryID
100 1 Academica 0 1 34
100 3 Master Card 0 1 34
-27.5 3 Master Card 34 1 35
100 4 Visa 34 1 35
Wieso klappt aber das erste (meiner Meinung nach richtige) Statement nicht?
|
|
|
01.06.2008, 23:43
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
1. SQL ist in mySQL case-sensitive (GROUP BY t.accountid)
2. Alle Ausdrücke in GROUP müssen auch im SELECT vorkommen
so hast Du im Select a.accountID, gruppierst aber nach t.accountid
|
|
|
02.06.2008, 08:04
|
#3
|
|
TP-Junior
Registriert seit: Apr 2008
|
Beide Punkte jetzt beachtet, aber das Resultat ist dasselbe 
|
|
|
02.06.2008, 10:04
|
#4
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
die beiden Queries sind 100prozentig identisch - ehrlich gesagt kann ich dir da nicht ganz folgen
@Steffen: in MySQL ist groß/kleinschreibung m.E. egal... Ebenso ist MySQL eines der wenigen System, die im GroupBy nicht alle Felder aus dem Select voraussetzten.
|
|
|
02.06.2008, 10:09
|
#5
|
|
TP-Junior
Registriert seit: Apr 2008
|
Sorry mein Fehler:
Das eine Query (das eben diesen Output generierte), hat als GroupBy:
c.CategoryID, t.AccountID
|
|
|
02.06.2008, 13:17
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Hi Jan,
das mit der Gross/Kleinschreibung hab ich erst kürzlich festgestellt, hier funktionierten Feldzuweisungen nicht wegen falscher Schreibweise, vll ist das neu in Version 5?
http://dev.mysql.com/doc/refman/5.0/...nsitivity.html
Zum GroupBy hatte ich schon öfters Fehlermeldung, wenn das nicht im Select vorkommt, habe nichts eindeutiges in der Doku finden können (alle Beispiele erfüllen das aber)
|
|
|
03.06.2008, 12:19
|
#7
|
|
TP-Junior
Registriert seit: Apr 2008
|
Weiss da niemand ne Lösung? Ich komm echt nicht weiter! Das komische ist: Wenn ich das ganze Statement, das Probleme macht so schreibe:
Code:
SELECT t.Amount AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
FROM Transactions AS t
INNER JOIN Categories AS c ON t.CategoryID = c.CategoryID
INNER JOIN Accounts AS a ON t.AccountID = a.AccountID
INNER JOIN AccountType AS at ON a.AccountTypeID = at.AccountTypeID
WHERE a.UserID =1
AND (
c.CategoryID =35
OR c.ParentID =35
)
ORDER BY at.Position
LIMIT 0 , 30
gibt es folgenden Output:
HTML-Code:
t_amount AccountID a_name ParentID UserID CategoryID
-27 3 Master Card 34 1 35
100 4 Visa 34 1 35
So:
Code:
SELECT SUM( t.Amount ) AS t_amount, a.AccountID, a.AccountName AS a_name, c.ParentID, a.UserID, c.CategoryID
FROM Transactions AS t
INNER JOIN Categories AS c ON t.CategoryID = c.CategoryID
INNER JOIN Accounts AS a ON t.AccountID = a.AccountID
INNER JOIN AccountType AS at ON a.AccountTypeID = at.AccountTypeID
GROUP BY a.AccountID
HAVING a.UserID =1
AND (
c.CategoryID =35
OR c.ParentID =35
)
ORDER BY at.Position
LIMIT 0 , 30
gibt es aber nix! Wieso?!?
|
|
|
03.06.2008, 12:48
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
OR c.ParentID =34 ?
In solchen Fällen nehm ich der Reihe nach Ausdrücke weg um die Ursache zu finden.
|
|
|
03.06.2008, 12:50
|
#9
|
|
TP-Junior
Registriert seit: Apr 2008
|
Ne das mit der parentid stimmt so. ja hab ich auch, es gibt erst probleme ab dem das group by dabei ist, vorher nicht!
|
|
|
03.06.2008, 23:38
|
#10
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
hast Du mal statt HAVING WHERE probiert?
|
|
|
04.06.2008, 06:14
|
#11
|
|
TP-Junior
Registriert seit: Apr 2008
|
ja mit where geht gar nichts. das komische ist, dass es nur bei categoryid=34 und 35 nicht funzt. wieso weiss ich aber nicht, bei den anderen gehts.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:47 Uhr.
|
 |