hoeveelste iemand was
Ik zou graag in mijn database zetten hoeveeste iemand geindigt is. (1ste / 2de / 3de enz.)
Ik gebruik een gewone mysql database van lycos, de naam van de table is kaarten:
CREATE TABLE kaarten (
id int(20) NOT NULL default '0',
nr tinyint(4) NOT NULL default '0',
naam tinytext NOT NULL,
hoeveelste tinyint(4) NOT NULL default '0',
was tinyint(4) NOT NULL default '0',
uitslag int(10) NOT NULL default '0',
totaal int(10) NOT NULL default '0',
Marsen tinyint(4) NOT NULL default '0',
MarsenTotaal tinyint(4) NOT NULL default '0'
) TYPE=MyISAM;
Hoeveelste iemand is heeft te maken met de totale score van iemand (totaal). Meer regels zijn daar eigenlijk niet over te melden.
Ik weet dat ik hoeveelste iemand geeindigt is beter kan uitlenen uit de score (totaal) MAAR dan weet ik niet hoe ik dat later nog een keer oproep om een kolom te vullen met hoeveelste iemand een week terug was.
als iemand weet hoe.. please tell me.
Ik heb alleen geen zin in nog meer discusies over dat ik zoiets niet een database hoor te zette want die heb ik al genoeg gehad.
Voor een andere/ betere oplossing sta ik natuurlijk altijd open.
thnx anyway
Grtjes Peter(www.MSNers.tk)
Gewijzigd op 27/04/2004 19:35:00 door Peter
Misschien is het bij MSNers.tk anders: Maar het is hier niet het gilde van mensen met contact met de andere wereld en andere vriendjes van jomanda: Je zult ons iets meer hints moeten geven over kleinigheden als
[1] Wat voor database gebruik je?
[2] Wat is je tabel layout
[3] Wanneer is iemand 'eerste' en waarin? Wat zijn de regels om dat vast te stellen?
Ik vertrouw erop dat ook jij straks vragen kunt stellen waar wij antwoord op kunnen geven ;)
Kheb het bericht wat uitgebreider gemaakt.
Khoop dat iemand me nu wel begrijpt.
Grtjes Peter
^^^ zoiets?
Je kan twee dingen doen: elke week een 'backup' maken met de lijsten van users en daar de score in apart op slaan.
Of de scores apart van de users opslaan:
een tabel users
en een tabel score
die er ongeveer zo uitziet:
create table users (
user_id int(6) auto_increment,
user_naam varchar(50) not null,
primary key(user_id)
);
Wat je voor plannen had met de rest snap ik niet echt precies, maar het waren vast goede bedoelingen.
create table score (
score_user_id int(6),
score_date datetime,
score_punten int(2),
index(score_user_id, score_inhoud)
);
Zo tel je niet het aantal punten op in de user tabel, maar maak je een lijst met scores, en elke score wordt bij elkaar opgeteld.
En zo kan je precies terug in het verleden teruggaan naar scores:
Bijvoorbeeld de plaats van persoon met user_id 12 (in de tabel users staat dat ie bassie heet);
SELECT users.user_id,sum(score.score_punten)
FROM score, users
WHERE score.score_user_id = users.user_id
GROUP BY users.user_id
ORDER BY sum(score.score_punten) DESC
SELECT users.user_id,sum(score.score_punten)
FROM score, users
WHERE score.score_user_id = users.user_id
AND score.score_date < '2004-05-06'
GROUP BY users.user_id
ORDER BY sum(score.score_punten) DESC
geeft je de ranglijst op 6 mei 2004. (niet totaal zeker over of de vergelijking qua datum klopt, moet je zelf ff uitzoeken, waarschijnlijk moet je mysql date conversie functies hiervoor gebruiken).
Wil je de persoon zelf weten qua ranglijst:
SELECT count(users.user_id)+1
FROM users, score
WHERE users.user_id = score.score_user_id
AND sum(score.score_punten) > (
SELECT sum(score.score_punten) FROM score where score_user_id = $id)
Iig leuk spul om je SQL eens op te vijzelen.
Gewijzigd op 27/04/2004 23:53:00 door Arend a
Grtjes Peter