Insert of update adhv vorige rij...

Status
Niet open voor verdere reacties.

invictis

Gebruiker
Lid geworden
8 dec 2009
Berichten
17
Ik wil een stand maken in mijn database.

Deelnemer, Positie, totaalscore


de totaalscore komen vanuit 3 tabellen dmv een insert...de positie is een auto increment, zodat de hoogste punten aantal positie 1 krijgt. Nu kan het echter voorkomen dat er meerdere mensen de zelfde score hebben..dan zouden deze beide de zelfde positie moeten krijgen. De gene daarna moet dan zijn eigenlijke positie krijgen oftewel : 1e 2e 2e 4e 5e 5e 7e

Ik vind het niet erg om nog een nieuwe tabel te moeten maken om dit te bewerkstelligen, maar ik heb geen idee hoe ik in een insert of dmv een update een vergelijking met zijn vorige regel kan laten maken om dus bovenstaande situatie te creeeren.

Thanks
 
Je zult iig de auto increment eraf moeten halen, want die gaat automatisch op blijven hogen, dus je zult een nieuw veld "positie" toe moeten voegen.

Het beste kun je ws de posities van tevoren bereken in PHP, denk ik. Het is misschien wel mogelijk in SQL maar volgensmij wordt je daar niet blij van. Je zou het kunnen proberen met een COUNT() over de andere tabel en dan kijken hoeveel deelnemers een hogere score hebben?
 
Het is iets uitgebreider dan ik had beschreven:

we hebben de tabel stand, deze tabel toont de totaalstand. elke x voor dat er een nieuwe stand wordt berekend wordt de oude stand weggeschreven naar een his_stand....zodoende krijg ik dus per deelnemer de historie in de stand te zien...

In PHP is het al gelukt om de stand goed te krijgen, maar dit werkt niet met de stand uit his_stand omdat we bij de werkelijke stand order by totaalscore doen aflopend. Dan kan hij de vergelijking maken met de vorige punten...en zien als ze gelijk zijn vorige positie en anders eigen positie.

In de his_stand gaat dit niet op omdat hier niet gesorteerd wordt op totaal_score, maar dat hij de positie/score opzoekt bij een deelnemer_id...


iemand wel een idee?
 
nog niet opgelost

Het probleem is nog niet opgelost...iemand nog een idee?

er moet dus in 1 tabel een update plaats vinden van de kolom positie en wel als scorevorige = scorehuidige dan positie vorige anders geen update, of eigen waarde behouden...

het liefst wil ik dit in de database opslaan..
 
Waarom zou je de stand op willen slaan wanneer deze in een query uit te voeren is. De ranglijst is iets wat herleidbaar is en herleidbare gegevens hoef je niet op te slaan in je database. Je kan simpelweg in de applicatie de ranglijst opbouwen aan de hand van de resultset van je query.

Stel, je maakt een query die alle deelnemers teruggeeft in een resultset aflopend aan de hand van het aantal punten. Dan gebruik je deze query in de volgende trant:

Code:
rang = 1;
previousRow = null;
foreach( row in resultset) {
 if(previousRow != null) {
  if(previousRow.score != row.score){
   rang++;
  }
   //presenteer hier de deelnemer met het rangnummer ervoor
 }
previousRow = row;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan