Toon posts:

[Alg] Welke plek in de top xxx

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik meende dat dit topic al een langs gekomen is maar na lang zoeken heb ik het nog steeds niet gevonden. Vandaar dit topic...

Mijn doel:
Ik wil op een smoelenboek/stemsite op het profiel kunnen weergeven op welke plek die persoon staat in de top xxx. Ik heb dus een gemiddelde cijfer, maar wil niet alle profielen ophalen en aan de hand daarvan kijken op welke plek iemand staat.

Is het mogelijk om door middel van een query uit te vinden op welke positie die persoon staat? Ik heb er een hard hoofd in en verwacht ook niet dat het kan. Maar het zou wel mooi zijn :)

De site is geprogrammeerd in PHP en maakt gebruik van MySQL, maar de oplossing zal redelijk generiek zijn (op het punt na dat je geen subqueries kan doen :( )

Alle tips en hulp zijn welkom, misschien komen we met zijn allen tot een redelijk efficiente oplossing.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Ik heb de quickstart gelezen..
Heb ik volgens jou dan iets gedaan wat in strijd is met de Quickstart?

En ja ik ken MySQL en limit, ik kan een top100 creeren als lijst.
Maar ik wil voor een INDIVIDUELE (!) persoon zijn plek weten in de top xxx,
zonder eerst die hele top xxx op te halen en dan met een for loop te gaan kijken op welke plek die persoon staat.

Mischien is een onderbouwing van je post een goed idee de volgende keer?

[ Voor 0% gewijzigd door Verwijderd op 24-09-2002 12:55 . Reden: typos ]


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Trebel: heb je in die top 100 de positie al staan?
dan is het toch gewoon een kwestie van een where toevoegen?

Doet iets met Cloud (MS/IBM)


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

als je de documentatie van limit goed had bekeken wist je ook dat je behalve het aantal rows dat je terug wilt krijgen ook de startrow kunt opgeven

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
D2k schreef op 24 september 2002 @ 12:56:
Trebel: heb je in die top 100 de positie al staan?
dan is het toch gewoon een kwestie van een where toevoegen?
Ik haal gewoon met een query de top xxx eruit dmv een ORDER op de AVG(cijfer) en LIMIT xxx. Dan voeg ik daar tijdens het printen de $i bij zodat op de site er keurig 1,2,3,4,5.... voor staat.
Dus in de db staat niet de positie opgeslagen

Verwijderd

Topicstarter
.oisyn schreef op 24 september 2002 @ 12:57:
als je de documentatie van limit goed had bekeken wist je ook dat je behalve het aantal rows dat je terug wilt krijgen ook de startrow kunt opgeven
Ook dat weet ik,
maar ik wil juist die startrow weten!

Ik zal proberen het nog wat duidelijker te maken.

Iedereen heeft een cijfer.
Nu wil ik dus proberen voor persoon X in zijn profiel zijn plek in de top xxx neer te zetten. Dus niet de topxxx beginnend bij positie 10.
Ik wil alleen maar weten welke plek hij zou staan op het moment dat ik de hele topxxx zou neer zetten. Zonder die hele top xxx door te lopen..

[ Voor 0% gewijzigd door Verwijderd op 24-09-2002 13:01 . Reden: nog wat duidelijker gemaakt ]


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

hier stond onzin

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Wat je feitelijk wilt weten, is hoeveel personen er boven deze persoon staan, dat wil zeggen: hoeveel personen er een hoger cijfer hebben. Zo geformuleerd is de vraag direct om te zetten in een SQL query:

code:
1
SELECT COUNT(*) FROM tabel WHERE cijfer > 7


Hierbij moet je natuurlijk wel het cijfer van de persoon in kwestie al kennen, maar dat is eenvoudig te doen met:
code:
1
SELECT cijfer FROM tabel WHERE persoon_id = 12345

Of iets dergelijks.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Gewoon ff in woorden uitdrukken wat je wilt hebben

Ik wil de positie hebben van een persoon in een lijstje. Een positie X betekend dat er X-1 mensen zijn die een hogere score hebben. Om de positie dan te bepalen moet je dus tellen hoeveel mensen een hogere score hebben dan de persoon zelf.

Ik denk dat je er nu wel uit komt (En LIMIT of ORDER BY is dus helemaal niet nodig!!)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Soultaker schreef op 24 september 2002 @ 13:06:
Wat je feitelijk wilt weten, is hoeveel personen er boven deze persoon staan, dat wil zeggen: hoeveel personen er een hoge cijfer hebben. Zo geformuleerd is de vraag direct om te zetten in een SQL query:

code:
1
2
SELECT COUNT(*) WHERE cijfer > 
(SELECT cijfer FROM tabel WHERE persoon_id = 12345)
Ja dat wil ik inderdaad :)
Thanx! (nu nog omzetten naar een niet geneste query, maar das te doen).

ik zit nu dus te denken aan het volgende:

code:
1
2
3
SELECT cijfer FROM table1 WHERE id = [id van persoon]

SELECT COUNT(*) From table1 WHERE cijfer > [cijfer uit query 1]


Het is volgens mij dus toch simpeler dan ik bang voor was...

[ Voor 0% gewijzigd door Verwijderd op 24-09-2002 13:10 . Reden: anti-layout verneuking ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Verwijderd schreef op 24 september 2002 @ 13:09:
Ja dat wil ik inderdaad :)
Thanx! (nu nog omzetten naar een niet geneste query, maar das te doen).
Dat leek me bij nader inzien ook duidelijker - vandaar dat ik 'm bericht had ge-edit. Ik zie dat je er zelf ook al uit bent gekomen, dus dat is ook goed.

In het algemeen is het handig om bij vierde generatie (ofwel declaratieve) programmeertalen te bedenken wat je wilt bereiken en niet zozeer welke berekeningen/selecties uitgevoerd moeten worden. De feitelijke oplossing in een taal als SQL is dan meestal triviaal.

Verwijderd

Topicstarter
Soultaker schreef op 24 september 2002 @ 13:14:
[...]


Dat leek me bij nader inzien ook duidelijker - vandaar dat ik 'm bericht had ge-edit. Ik zie dat je er zelf ook al uit bent gekomen, dus dat is ook goed.

In het algemeen is het handig om bij vierde generatie (ofwel declaratieve) programmeertalen te bedenken wat je wilt bereiken en niet zozeer welke berekeningen/selecties uitgevoerd moeten worden. De feitelijke oplossing in een taal als SQL is dan meestal triviaal.
Dat leren wij toch te weinig op onze opleiding vind ik... (Hogere Informatica Hv Utrecht).
Tis ook niet dat ik het niet kan implementeren, maar heb af en toe moeite met het bedenken van hoe ik zoiets moet doen...
Pagina: 1