Toon posts:

Pittig SQL prob

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een pittig sql prob waar ik niet uit kom.

Ik heb twee tabellen. Een met een bepaald idee, en een tweede met daarin votes op dat idee. Dus:

ideeen:
id, idee

votes:
id, ideeid, vote

Een vote kan 1 t/m 5 zijn.

Nou ben ik dus al 2 uur bezig om een query te bedenken die alle ideeen ophaald en die sorteerd op de gemiddelde ranking, van de hoogste ranking tot de laagste ranking.
De query moet dus voor ieder idee alle votes van dat idee bij elkaar optellen, delen door het aantal votes op dat idee en op het resultaat van die berekening (gemiddelde) sorteren.

Kan iemand mij zeggen of dit uberhaubt mogelijk is en me in de goede richting wijzen?

  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09-2025
2 query's denk ik :? Is het met php gecombineerd?

Verwijderd

Je kunt natuurlijk ook gewoon je DB querien met alle data, en die zelf in PHP/whatever processen. Ik zou iig niet zo snel weten watvoor query je nodig hebt. Je wilt eigenlijk alles door je SQL DB laten processen. Welke SQL DB gebruik je eigenlijk, MySQL?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Kijk eens naar sum() en count() en de as oparator. Als je dan nog je join goed maakt kan het in 1 query

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

volgens mij heeft SQL ook nog AVG.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Je kunt natuurlijk ook gewoon je DB querien met alle data, en die zelf in PHP/whatever processen. Ik zou iig niet zo snel weten watvoor query je nodig hebt. Je wilt eigenlijk alles door je SQL DB laten processen. Welke SQL DB gebruik je eigenlijk, MySQL?
Had ik idd ook al bedacht, maar arrays werken gigantisch k*t in asp :(
Ik was namelijk begonnen met een stukkie waarin ik iedere id van een idee als element van een array had en dan de value van dat element werd steeds opgeteld met de volgende vote. En dan wilde ik sorteren op vote desc. En vervolgens die array weer doorlopen en iedere elementkey (id van idee) ophalen en dan query uitvoeren met die elementkey op de ideeen tabel.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Don Facundo schreef op 17 oktober 2002 @ 18:28:
volgens mij heeft SQL ook nog AVG.
*DOW* ik ben weer wakker ja.. sum() en count() whehe., duh.. ja.. avg() is dan een stuk makkelijker..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • TimMer
  • Registratie: Februari 2000
  • Niet online
Zoiets dacht ik zo:
code:
1
2
3
4
5
select idee
From ideeen I left outer join avg(vote) From votes V
Where I.id = V.ideeid
Group by idee
Order by V.vote;

  • whoami
  • Registratie: December 2000
  • Laatst online: 30-08 19:34
Met AVG moet het in 1 query te doen zijn.

https://fgheysels.github.io/


  • TimMer
  • Registratie: Februari 2000
  • Niet online
Creepy schreef op 17 oktober 2002 @ 18:31:
[...]


*DOW* ik ben weer wakker ja.. sum() en count() whehe., duh.. ja.. avg() is dan een stuk makkelijker..
Inderdaad, ik volg momenteel modules over SQL en hierbij worden toch aardig wat wiskundige functies gebruikt, waaronder AVG.

Verwijderd

Uit de losse pols
code:
1
2
3
SELECT I.ID, I.Idee, AVG(V.Vote) as AvgVoteScore
FROM Idee I LEFT JOIN Vote V ON I.ID = V.IdeeID
GROUP BY I.ID, I.Idee

en vervolgens kan je met de Sort() methode van het RecordSet object sorteren op de kolom AvgVoteScore, en vervolgens tonen.

Enjoy :)

edit:
Oeps ... nou maak ik het eigenlijk iets te makkelijk ...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 17 oktober 2002 @ 18:35:
Uit de losse pols
code:
1
2
3
SELECT I.ID, I.Idee, AVG(V.Vote) as AvgVoteScore
FROM Idee I LEFT JOIN Vote V ON I.ID = V.IdeeID
GROUP BY I.ID, I.Idee

en vervolgens kan je met de Sort() methode van het RecordSet object sorteren op de kolom AvgVoteScore, en vervolgens tonen.

Enjoy :)

edit:
Oeps ... nou maak ik het eigenlijk iets te makkelijk ...
Zet dan ook meteen order by er nog tussen ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Senks you very much allemaal! :)

[sql-modus :P]

SELECT I.id, I.idee, Avg(V.rating) AS AvgVoteScore
FROM tbl_ideeen AS I LEFT JOIN tbl_votes AS V ON I.id = V.ideeid
GROUP BY I.id, I.idee
ORDER BY Avg(V.rating) DESC;

[/sql-modus]

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
En hoe zit het eigenlijk met ideeen waarvoor helemaal geen votes aanwezig zijn?

Never underestimate the power of


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Hij gebruikt toch een LEFT JOIN, dus daar komt als gemiddelde NULL uit.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

cameodski schreef op 17 oktober 2002 @ 23:55:
En hoe zit het eigenlijk met ideeen waarvoor helemaal geen votes aanwezig zijn?
Of je kan met HAVING die er uit filteren.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Een idee zonder votes lijkt mij inderdaad niet zo wenselijk om te zien.
Alleen moet je hem dan niet met HAVING eruit filter maar dmv WHERE v.id IS NOT NULL.

Never underestimate the power of


Verwijderd

Topicstarter
Idee met votes moet ik ook gewoon laten zien, alleen dan staat er (0 stemmen) :)
Want mensen moeten wel gewoon het idee kunnen zien.
Pagina: 1