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
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:
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: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
Wieso klappt aber das erste (meiner Meinung nach richtige) Statement nicht?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
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
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Beide Punkte jetzt beachtet, aber das Resultat ist dasselbe![]()
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.
Sorry mein Fehler:
Das eine Query (das eben diesen Output generierte), hat als GroupBy:
c.CategoryID, t.AccountID
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)
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Weiss da niemand ne Lösung? Ich komm echt nicht weiter! Das komische ist: Wenn ich das ganze Statement, das Probleme macht so schreibe:
gibt es folgenden Output: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
So:HTML-Code:t_amount AccountID a_name ParentID UserID CategoryID -27 3 Master Card 34 1 35 100 4 Visa 34 1 35
gibt es aber nix! 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 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
OR c.ParentID =34 ?
In solchen Fällen nehm ich der Reihe nach Ausdrücke weg um die Ursache zu finden.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Ne das mit der parentid stimmt so. ja hab ich auch, es gibt erst probleme ab dem das group by dabei ist, vorher nicht!
hast Du mal statt HAVING WHERE probiert?
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
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)