Toon posts:

[MYSQL] 3 tables JOINEN met gemiddelden en totalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb 3 tabellen, hieronder de relevante velden

table ad
code:
1
2
ad_id 
id_user


table user
code:
1
2
user_id 
name


table rate
code:
1
2
3
rate_id 
user 
rating


Ad heeft bij elke record een corresponderende user in ID-user
User spreekt voor zich
rate KAN een aantal records met de corresponderende user hebben.

Ik wil uit ad het totaal aantal records van user
uit user de naam
uit rate de gemiddelde rate van desbetreffende user (indien die bestaat)

PHP:
1
2
3
4
5
SELECT COUNT(ad.ad_id)  AS number, user.name, AVG(SUM(rate.rating))  
FROM ad 
INNER JOIN user ON (id_user = user_id)  
RIGHT JOIN rate ON (id_user = user)  
WHERE ad.id_user=1


Dit geeft 'invalid use of group function' terug.

Mijn sql is niet zo sterk. Dus het zal ongetwijfeld aan mij liggen :) Iemand die wat licht op de zaak kan schijnen?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Hoe kun je het gemiddelde van een som berekenen? Een som is maar één getal, valt ie daar niet gewoon over? Laat die SUM eens weg?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-NMe- schreef op vrijdag 09 september 2005 @ 22:01:
Hoe kun je het gemiddelde van een som berekenen? Een som is maar één getal, valt ie daar niet gewoon over? Laat die SUM eens weg?
rating is een tabel, waar meerdere records instaan met 1 cijfer (0 tm9) om een gemiddelde uit te rekenen moet ik dus eerst alle records where id=1 bij elkaar optellen voordat ik tot een gemiddelde kan komen toch?

-edit-

_O_
Held!

[ Voor 4% gewijzigd door Verwijderd op 09-09-2005 22:16 ]


Verwijderd

Topicstarter
Ok, hij selecteert nu het totaal aantal records uit ad
de name uit users.
Die relatie bestaat altijd

Maar... als er nog GEEN rating bestaat in rate, select hij ook geen naam en totaal aantal records uit de andere twee tabellen.

code:
1
2
3
4
5
6
SELECT user.name, COUNT(ad.ad_id)  AS number, AVG(rate.rating) AS average
FROM ad
INNER JOIN user ON user.user_id = ad.id_user
LEFT JOIN rate ON rate.user = ad.id_user
WHERE ad.id-user =".$_GET['id']."
GROUP BY user.name


Wat doe ik fout?

[ Voor 3% gewijzigd door Verwijderd op 09-09-2005 22:38 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

SQL:
1
2
3
4
5
6
SELECT user.name, COUNT(ad.ad_id)  AS number, AVG(rate.rating) AS average
FROM ad
INNER JOIN user ON user.user_id = ad.id_user
LEFT JOIN rate ON rate.user = ad.id_user OR rate.user IS NULL
WHERE ad.id_user = 1
GROUP BY user.name

Zoiets?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ik schaam me diep.
Hij werkt prima, maar je moet natuurlijk de veldnamen in je life tabel wel dezelfde naam geven als in je testtabel :{
Pagina: 1