Bonjour :)
J'ai un petit problème de logique algorythmique que j'arrive pas à résoudre, du coup je comptais un peu sur vous pour m'indiquez la voie à suivre.
Chaque connexion à mon site est enregistré dans ma BDD, j'ai ainsi l'IP et la date (en timestamp, je sais, c'est pas très propre mais bon..).
Ce que j'aimerai c'est pouvoir avoir le compteur pour la semaine passé du lundi au dimanche, ainsi que cette semaine, pareil du lundi au dimanche. (J'insiste sur le fait que je veux du lundi au dimanche, et non pas des X derniers jours, peu importe si la semaine est pas finit).
Donc je peux faire un group by des IP déjà pour ne pas compter plusieurs fois la même IP, mais après ça, je sais pas comment mettre en place le système de dates. J'ai beau chercher, la logique ne vient pas.
Après l'idée, c'est de ressortir ça sous la forme [1,4,3,10,0,3,8].
Voilà si vous pouvez m'aider, merci :)
Je reste dispo pour plus d'informations, je peux pas partager de code parce qu'il n'y en a tout simplement pas, vu que je pars de 0 pour ça. Peut-être faut-il sortir une fonction. Je sais pas quelle est la bonne méthode à adopter
Bon après des heures et des heures de recherche, à creuser, me torturé le cerveau, testé multitudes de codes foireux, j'ai finalement réussi à écrire le St Graal :
function getWeeklyCount() {
global $db;
$time = strtotime("next Monday"); // On initialise au prochain lundi
$value = 86400; // Timestamp de 24 heures
for($i = 14; $i >= 0; $i--){ // On stocke les 14 jours avant le lundi
$result[$i] = $time;
$time = $time-$value;
}
for($j = 0; $j <= 14 ; $j++) { // On requête les 14 compteurs
$visitor = mysqli_num_rows(query('SELECT * FROM logger WHERE date > '.$result[$j].' AND date < '.$result[$j+1].' GROUP BY ip'));
$finalResult[] = $visitor;
}
return $count = array(
"last" => $finalResult[0].','.$finalResult[1].','.$finalResult[2].','.$finalResult[3].','.$finalResult[4].','.$finalResult[5].','.$finalResult[6],
"current" => $finalResult[7].','.$finalResult[8].','.$finalResult[9].','.$finalResult[10].','.$finalResult[11].','.$finalResult[12].','.$finalResult[13]
);
}
Et après suffit que j'appelle la requête avec getWeeklyCount()["current"] et il me donne mes informations : 4,5,10,2,0,6,6 par exemple.
Bref, sujet résolu, merci à ceux qui ont tenté de m'aider :)
Salut,
j'ai cru comprendre que tu n'as pas vraiment besoin d'enregistrer les date en TIMESTAMP.
Tu pourrai les convertir en DATETIME :
http://sql.sh/107-cast-timestamp-date
Comme ça tu peux utiliser "$datetime->format()" :
http://php.net/manual/fr/datetime.format.php
Tous les "formats" sont disponibles ici :
http://php.net/manual/fr/function.date.php
Il me semble que tu va vouloir utiliser : Y, m, d, et N
Oui, je dis juste que les dates sont enregistrées en timestamp dans la bdd, rien ne m'empêche de les convertir pour obtenir mon résultat, mais je bloque toujours autant à ce niveau là
Ah zut,
eh bien je ne sais pas... Normalement tu t'en sors avec les 3 liens que j'ai donné.
Essaies un peu de prendre en ça en main, fais des tests pour voir comment ça fonctionne, toussa toussa...
Tu vas y arriver.
Et si tu tombes sur un problème précis, reviens ici, on pourra toujours te filer un coup de main.
Bah mon problème précis c'est que je sais pas rien qu'en français, créer l'algorythme pour ce que je cherche à faire :/
Salut,
Il faut manipuler les dates pour cela :
Et le tour est joué ;)
Tu peux essayer de manipuler les dates avec CarbonPHP, il est pas mal. Sinon, tu as la classe DateTime de PHP (http://php.net/manual/fr/class.datetime.php).