[Access] Laddercompetitie probleem

Pagina: 1
Acties:
  • 135 views sinds 30-01-2008
  • Reageer

  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Ik wil een simpele database maken met gegevens over een laddercompetite squash.
De relevante regels zijn als volgt:

- Je kan alleen iemand die 3 plaatsen hoger of lager van je staat in de ladder uitdagen.
- Bij winst stijg je een plaats bij verlies daal je een plaats.

Er stuit echter op een probleem want ik zal proberen duidelijk te maken:
De ladder ziet er bijvoorbeeld als volgt uit:
code:
1
2
3
4
5
6
1             Jan Janssen                     
2             Piet Klaassen
3             Klaas Pietersen
4             Sjaak de vries
5             Kees dinges
6             Frank de Boer


Nu wint 'Sjaak' van 'Jan'. Sjaak gaat dus 1 plaats omhoog en Jan gaat 1 plaats omlaag. Piet gaat nu dus automatisch omhoog en Klaas gaat een plaats omlaag.

Hoe moet de query eruit zien die dit mogelijk maakt?

Want, IF[GEWONNEN?]; ja; [Plaats]-1 werkt natuurlijk niet want dan krijg je dat zowel Sjaak als Klaas op de 3e plaats staan. Hetzelfde geld voor Jan en Piet.

Ik hoop dat jullie mijn probleem snappen. Het was moeilijk om hiervoor een zoekterm te vinden. Zoeken op Laddercompetitie+Access gaf zowel op google als met de search geen resultaat.

"We do not first see, then define, we define first and then see" (Lippmann)


Verwijderd

Een mogelijke omweg?:
- Als gewonnen dan plaatsnummer = plaatsnummer - 1,1
- Als verloren dan plaatsnummer = plaatsnummer + 1,1
- Opnieuw sorteren op plaatsnummer.
- Plaatsnummers hernummeren 1,2,3,4, etc.

Heb er nog niet over nagedacht of dit ook werkt met meerdere wedstrijden die tegelijkertijd plaats vinden.

  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Mmmm, dit zou kunnen werken.
Dit gebeurd er in dan als Sjaak wint van Jan:

code:
1
2
3
4
5
6
2             Piet Klaassen                    
2,1          Jan Janssen 
2,9          Sjaak de vries
3             Klaas Pietersen
5             Kees dinges
6             Frank de Boer


Dat klopt inderdaad, maar hoe maak je nu een hernummering? Zodat de getallen
weer 1 t/m 6 worden?

"We do not first see, then define, we define first and then see" (Lippmann)


  • Boss
  • Registratie: September 1999
  • Laatst online: 21:39

Boss

+1 Overgewaardeerd

Ik dnk dat je niet in termen van SQL moet denken hiervoor. Maak met VBA wat routines om mensen te verplaatsen. Gebruik hiervoor recordsets die je kan sorteren, doorlopen en wijzigen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Ik ben helemaal niet bekend met VBA. Volgens mij is er geen andere oplossing ...

"We do not first see, then define, we define first and then see" (Lippmann)


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Met een paar iif's en een updatequery kom je een aardig eind als je bedenkt dat een plaats stijgen of dalen niets anders is dan ruilen met de volgende / vorige.
Bijvoorbeeld voor de winnaar die op plaats n stond:
code:
1
2
UPDATE tblLadder SET tblLadder.rang = IIf([rang]=[n],[n]-1,[n])
WHERE (((tblLadder.rang)=[n] Or (tblLadder.rang)=[n]-1));

Kun je nog uitbreiden met een winstparameter zodat ie ook meteen de verliezer bijwerkt en een controle of de winnaar niet al op de 1e plaats/de verliezer op de laatste stond.toevoegen of de winnaar niet al op 1 stond

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 26-08 12:17
Als je iemand die verliest 1,2 punten laat zakken, iemand die wint 1,2, hersorteren klaar?

Houdoe


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

even een kleine titeledit van ACCESS > Access. Verder is dit niet zozeer een Access, maar meer een algoritme probleem.

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
@ Niejse:

Het klinkt ongelofelijk simpel als jij het zegt, maar het lukt me niet. Ik snap de code dan ook niet.
code:
1
2
UPDATE tblLadder SET tblLadder.rang = IIf([rang]=[n],[n]-1,[n])
WHERE (((tblLadder.rang)=[n] Or (tblLadder.rang)=[n]-1));

Als RANG 2 is dan moet hij er 1 van af halen of gewoon 2 blijven waar de rang
2 is of 2-1 is.

Zeg ik dit zo goed? Want dan klinkt het nogal onlogisch.

[ Voor 106% gewijzigd door MrDirk op 03-10-2004 14:06 ]

"We do not first see, then define, we define first and then see" (Lippmann)


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Rang is dit voorbeeld een veld waar het volgnummer in staat. Wat gebeurt er als N(met rang n; n>1) wint? Hij wisselt van plaats met N-1. Dus voer je een updatequery uit op de records rang=n of rang = (n-1); als de rang n is wordt hij n-1; in het andere geval wordt de nieuwe rang n.

Je kunt de query universeel maken door 2 parameters mee te geven; n en winstverlies. n is weer het rangnummer van de speler; winstverlies is -1 of 1. Omdat access de vergelijking booleaans behandeld als 0 of -1 kun je ook nog eens de iif() vervangen door een vermenigvuldiging:
[code] ... set rang=n-((rang=n)*winstverlies)
where rang=n or rang=n+winstverlies
[/code]
of alles in één mgv switch(), een uitgebreide where voorwaarde en een truukje om te voorkomen dat mensen buiten de lijst stijgen of zakken: n= rangnummer van de hoogstgenoteerde, winstverlies -1 als de hoogstgenoteerde wint, anders 1, Nmax als aantal deelnemers:
[code]
PARAMETERS n Short, winstverlies Short, maxN short;
UPDATE tblladder

SET tblladder.rang =
Switch(rang=n,n-(winstverlies*(n>1)),
rang=n+winstverlies,n,
rang=n+3,n+3+(winstverlies*((n+3)<maxN)),
rang=n+3-winstverlies,n+3)

WHERE (tblladder.rang=[n])
OR (tblladder.rang=[n]+[winstverlies])
OR (tblladder.rang=[n]+3-[winstverlies])
OR (tblladder.rang)=[n]+3);
[/code]
waarbij die vermenigvuldiging met (n>1) resp ((n+3)<maxN er voor zorgt dat niemand hoger stijgt dan 1 of lager zakt dan maxN

[ Voor 57% gewijzigd door Lustucru op 03-10-2004 22:55 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1