Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du skal have en tabel der registrerer de enkelte hits pr. person og laver sammentælling ud fra en given dato (noget a la SELECT spil_id, count(*) FROM hits WHERE dato>... GROUP BY spil_id). Hvad du skal angive som kriterie for dato afhænger af om du med "i dag" mener "sidste 24 timer" eller "dags dato" (i sidste tilfælde vil hits altid stå til 0 når vi rammer midnat, hvilket nok ikke er intentionen).
Din nuværende struktur med at gemme antallet på selve spillet, duer kun hvis du konsekvent nulstiller ved midnat (det skal så være en automatiseret proces, eks. et cronjob), ikke vil have historiske data, og er ligeglad med at der er gengangere (samme person der spiller samme spil flere gange på en dag).
Hvis du er ligeglad med gengangere, men gerne vil have historik, så kan du have en tabel der har én række pr. dag pr. spil, der så bliver talt op som nødvendigt (INSERT INTO (spil_id,dato,hits) VALUES ($spil_id,CURDATE(),1) ON DUPLICATE KEY UPDATE hits=hits+1). Det forudsætter dog at du ikke mener "mest populære inden for de sidste 24 timer", men "mest populære dags dato".
Kan jeg ikke oprette en tabel der kaldes "kliks", og kolonnerne "id, timestamp, game_id, hits", hvorefter når en besøger spillet indsætter jeg..
$SQL = "INSERT INTO (`game_id`,`timestamp`,`hits`) VALUES ($spil_id,CURDATE(),1) ON DUPLICATE KEY UPDATE hits=hits+1"; mysql_query($SQL) or die(mysql_error());
Så hvis den allerede findes, vil den bare opdatere hits med +1 ikke?
Hvad giver CURDATE() ? hvorfor ikke bruge time() ?
CURDATE() var under den forudsætning du mente "0:00-23:59". Det ville have givet dig den aktuelle dato uden tidspunkt.
Din ide er NÆSTEN som den skal være, men du skal ikke have et "hits" felt med, og der er intet med ON DUPLICATE KEY - du skal bare bruge COUNT(*) med GROUP BY game_id for at tælle hvor mange rækker der er for et givent spil i et givent tidsrum (=antal hits i perioden), og så bare have en række pr. klik. Sørg for et indeks på timestamp,game_id, da antallet af rækker nemt kan løbe op.
Tanken med det sidste af mine forslag var at primærnøglen var spil_id,dato, og der altså ikke var nogen anden ID-kolonne (ellers ville ON DUPLICATE KEY ikke fungere) - på den måde kunne du selecte alle rækker med den pågældende dato, og sortere efter hits-kolonnen for at få dem i den ønskede rækkefølge (totalen var beregnet på forhånd). Når du mener "sidste 24 timer", skal du dog have den ID-kolonne med for at det bliver mere effektivt (COUNT er hurtigere end SUM når vi har det her indeks).
Hvis du bruger et timestamp (altså et resultat fra time(), og ikke en DATETIME) så bruger du:
$timestamp=time()-86400; (træk 24 timer fra aktuelt tidspunkt); mysql_query('SELECT COUNT(*) as Antal, col FROM tabel WHERE timestamp > ' . $timestamp . ' GROUP BY spil_id ORDER BY Antal DESC LIMIT 1');
(Jeg glemmer altid om ORDER BY skal før GROUP BY eller ej, men virker det ikke, så prøv at bytte om på dem.)
Kan man ikke lave en mysql_query("....") i index.php filen, som automatisk sletter hvis den er under dagen, eller sådan noget? Kunne du ikke hjælpe mig lidt her.. for den viser det samme spil hver dag :(
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.