Das Problem ist ganz einfach erklärt:
AVG() soll nur auf die 3 höchsten Werte einer Abfrage angewendet werden. Normalerweise greife ich dafür auf einen Subquery zurück. Das Problem ist nur, dass sich AVG() bereits innerhalb eines Subqueries befindet und daher eine Referenz auf die äußere Abfrage nicht mehr möglich ist.
#1054 - Unknown column 'b.teamid' in 'on clause'
Hier der entsprechende Query:
Hier noch der Ausgangscode ohne Limitierung:
AVG() soll nur auf die 3 höchsten Werte einer Abfrage angewendet werden. Normalerweise greife ich dafür auf einen Subquery zurück. Das Problem ist nur, dass sich AVG() bereits innerhalb eines Subqueries befindet und daher eine Referenz auf die äußere Abfrage nicht mehr möglich ist.
#1054 - Unknown column 'b.teamid' in 'on clause'
Hier der entsprechende Query:
Code:
SELECT a .* , b.teamid, b.teamname, b.disq AS tdisq, COUNT( a.userID )AS players, ( SELECT AVG( top3 )AS team_avg FROM ( SELECT t.avg AS top3 FROM`ws_cup_user` s LEFT JOIN`ws_cup_results` t ON s.gameaccount = t.login WHERE t.avg ISNOTNULL AND s.team = a.team ORDER BY t.avg ASC LIMIT 0 , 3 ) AS avg_sub) AS team_avg FROM ws_cup_user a LEFTJOIN ws_cup_teams b ON a.team = b.teamid WHERE a.team >0 AND ( SELECT COUNT( w.avg ) FROM`ws_cup_user` v LEFT JOIN`ws_cup_results` w ON v.gameaccount = w.login WHERE v.team = b.teamid AND w.avg ISNOTNULL ORDER BY w.avg ASC LIMIT 0 , 3 ) >=3 GROUP BY a.team ORDER BY b.teamname ASC LIMIT 0 , 15
Code:
SELECT a .* , b.teamid, b.teamname, b.disq AS tdisq, COUNT( a.userID )AS players, ( SELECT AVG( y.avg ) FROM`ws_cup_user` x LEFT JOIN`ws_cup_results` y ON x.gameaccount = y.login WHERE x.team = b.teamid AND y.avg ISNOTNULL ORDERBY y.avg ASC LIMIT 0 , 3 ) AS team_avg FROM ws_cup_user a LEFT JOIN ws_cup_teams b ON a.team = b.teamid WHERE a.team >0 AND ( SELECT COUNT( w.avg ) FROM`ws_cup_user` v LEFT JOIN`ws_cup_results` w ON v.gameaccount = w.login WHERE v.team = b.teamid AND w.avg ISNOTNULL ORDER BY w.avg ASC LIMIT 0 , 3 ) >=3 GROUP BY a.team ORDER BY b.teamname ASC LIMIT 0 , 15
Kommentar