Invalid use of group function??
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
u.id
FROM
spellog u,
islands i
WHERE
(SUM(i.number) * 1000000 + u.punten) > 1004000
AND
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id
u.id
FROM
spellog u,
islands i
WHERE
(SUM(i.number) * 1000000 + u.punten) > 1004000
AND
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id
Het rare is, dat als ik de GROUP BY eruit laat, hij die error nog steeds geeft.
Dit zijn de structuren van mijn databases:
spellog
id (id van de speler)
punten (aantal punten)
active ('y' of 'n')
islands
id (id van het eiland)
number (hoeveelste eiland van die persoon)
pid (id van de speler)
Iemand enig idee waar het aan ligt?
Je mag SUM niet in WHERE gebruiken, omdat het een aggregate functie is. In plaats van WHERE moet je dan HAVING gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
u.id
(SUM(i.number) * 1000000 + u.punten) AS totaal
FROM
spellog u,
islands i
WHERE
totaal > 1004000
AND
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id
u.id
(SUM(i.number) * 1000000 + u.punten) AS totaal
FROM
spellog u,
islands i
WHERE
totaal > 1004000
AND
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id
Werkt dit niet?
@ Robert: nee, want in een WHERE mag je geen aliassen gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
u.id
FROM
spellog u,
islands i
WHERE
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id
HAVING
(SUM(i.number) * 1000000 + u.punten) > 1004000
u.id
FROM
spellog u,
islands i
WHERE
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id
HAVING
(SUM(i.number) * 1000000 + u.punten) > 1004000
Zo? Dit werkt nog steeds niet:
Unknown column 'u.punten' in 'having clause'
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
u.id,
(SUM(i.number) * 1000000 + u.punten) AS totaal
FROM
spellog u,
islands i
WHERE
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id,
totaal
HAVING
totaal > 1004000
u.id,
(SUM(i.number) * 1000000 + u.punten) AS totaal
FROM
spellog u,
islands i
WHERE
u.active = 'y'
AND
u.id = i.pid
GROUP BY
u.id,
totaal
HAVING
totaal > 1004000
zo toch?
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Edit:
probeer eerst even die van Klaasjan uit, die ziet er al beter uit.
probeer eerst even die van Klaasjan uit, die ziet er al beter uit.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Bedankt allemaal!
Graag gedaan. Goede topictitel overigens! :-)
Mooi
@Jan: Lol =P