|
Publicité | |||||||||||||||||||||||
|
|
#1 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Localisation: Là où il y a du calvados
Âge: 25
Messages: 55
|
Bonjour, je me permet de vous contacter car je souhaite réaliser un requête sql qui me comptabilise comme unique des enregistrements (pour des stats) des opérations pour un même identifiant dans un laps de temps < à 20 secondes.
Voici le plan de ma table : stat_id // stat_ref_qui // stat_type // stat_date // stat_operation // stat_ref_annexe // stat_login. Mon champs date étant construit tel que : AAAA-MM-JJ HH:MM:SS Voici le plan de ma requête : Code :
'SELECT DISTINCT * FROM stats_table WHERE stat_date >= \'2010-01-01 00:00:00\' AND stat_date <= \'2010-01-31 23:59:59\' AND stat_operation = 10 ';
Merci de votre aide |
|
|
|
|
|
#3 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Localisation: Là où il y a du calvados
Âge: 25
Messages: 55
|
Le soucis ne vient pas de moi, en fait le site est développé en externe et moi je dois m'occuper en interne d'en sortir des stats concrète, malheureusement les personnes qui développent notre site ne s'occupent pas de se problème qui vient du fait que si une personne clic 2 fois sur le bouton valider d'un formulaire car il charge pas assez rapidement pour lui alors il prendra en compte 2 clic donc 2 enregistrements qui correspondent en fait qu'à une seul opération si tu vois ce que je veux dire.
|
|
|
|
|
|
#4 (permalink) |
![]() Date d'inscription: juillet 2005
Messages: 10 053
|
C'est quand même gênant de dissimuler des lignes ; ca ne peut qu'être source de confusions.
Mais bon ... En SQL je ne vois pas comment on pourrait faire ; la seule solution qui me vient c'est de lire ligne par ligne en PHP et de comparer la date qu'on est en train de traiter avec celle qu'on a fait avant : si elles sont trop proches, on ne traite pas la ligne en cours. Ca implique evidemment qu'on fasse une requête triée par date. |
|
|
|
|
|
#5 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Localisation: Là où il y a du calvados
Âge: 25
Messages: 55
|
Ok avec une boucle je suppose, merci quand même, et oui c'est sur que c'est embettant pour afin d'avoir des stats fiables il faut que je me dem...de lol car sinon ca va tout fausser mes résultats, sachant qu'il faudrait que l'utilisateur soit vachement rapide pour faire 2 opérations en remplissant des formulaires différénts à - de 20 secondes d'intervalle lol
|
|
|
|
|
|
#8 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Localisation: Là où il y a du calvados
Âge: 25
Messages: 55
|
Oui, cela je sais faire, voici mon code :
Code :
// On liste en boucle les enregistrement while ($data = mysql_fetch_array($req)) { // on affiche les résultats echo 'Référence : '.$data[stat_ref_qui].' // Date : '.$data[stat_date].' // Opération : '.$data[stat_operation].' // Opération : '.$data[stat_type].'<br>'; } Cordialement |
|
|
|
|
|
#9 (permalink) |
![]() |
Il serait peut-être plus efficace de nettoyer la table en cherchant les faux doublons.
Comme tu fais un SELECT *, il est impossible de savoir quelle(s) colonne(s) permettrai(en)t de faire la distinction entre les vrai et les faux doublons. Le principe est de faire une auto-jointure de la table sur le même utilisateur et de pister deux lignes dont la colonne stat_date est distante de moins de X secondes (à toi de déterminer le X réaliste). Tu fais d'abord un test avec un SELECT et si le résultat te semble cohérent, tu DELETEs ! ![]() Ensuite tu auras une table propre pour faire tes statistiques. Attention si cette table est référencée en clé étrangère dans d'autres tables !
__________________
Philippe Leménager. Futur ingénieur CNAM, ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) |
|
|
|
|
|
#10 (permalink) |
![]() Date d'inscription: juillet 2005
Messages: 10 053
|
tu manques d'imagination :
Code :
$date_precedente = 0; while ($data = mysql_fetch_array($req)) { if ($date_precedente != 0 && strottime($data['stat_date']) - strtotime($date_precedente) > 20) { echo "c'est gagné"; } $date_precedente = $data['stat_date']; } |
|
|
|
|
|
#11 (permalink) |
|
Membre éclairé
![]() Date d'inscription: janvier 2010
Localisation: Ile De La Réunion
Messages: 393
|
Salut
Une idée comme ça, mais apparemment cela concerne une identification. Du coup, il n'est pas rare (à l'inverse : très courant) dans des cas comme celui ci qu'une gestion des sessions soient présente, ce qui sous entend qu'il y aurait peut être l'identifiant de chaque personne venant de s'identifier stockée dans la session. Dans ce cas présent une simple vérification sur la présence de cet identifiant pourrait peut être suffire avant de lancer une mise à jour des stats, non ?
__________________
Win XP | WampServer 2.0 | Apache 2.2.11 | Php 5.3.0 | MySQL 5.1.36 Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
|
|
#12 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Localisation: Là où il y a du calvados
Âge: 25
Messages: 55
|
Oui tout a fait j'ai un id de session reconnu dans le champs "stat_login" de ma table mais lorsque celui ci clic 2 fois sur le bouton valider du formulaire parce que ce n'est pas assez rapide pour lui alors cela m'engendre 2 enregistrements dans la table stats alors qu'en fait ca ne correspond qu'à un seul enregistrement, voici un exemple pour une opération sous l'id 3 :
stat_id // stat_ref_qui // stat_type // stat_date // stat_operation // stat_ref_annexe // stat_login 470 // 4070 // A // 2010-01-29 12:01:08 // 3 // // 1254896 471 // 4070 // A // 2010-01-29 11:59:41 // 3 // // 1254896 472 // 1 // A // 2010-01-27 14:53:21 // 3 // // 124781 En fait le 470 et 471 correspondent au même enregistrement mais 2 clic sur le bouton du formulaire donc c'est cela que je voudrait gérer |
|
|
|
|
|
#13 (permalink) | |
|
Membre éclairé
![]() Date d'inscription: janvier 2010
Localisation: Ile De La Réunion
Messages: 393
|
Citation:
Si j'ai bien compris, c'est cela dont il s'agit. La question est donc de savoir si dans cette session il y a un truc correspondant à une personne identifiée ? A mon avis ça devrait être le cas, ceci devrait être en relation avec une table genre "users", et l'élément pourrait avoir le nom de l'id de cette, du genre "users_id". Faudrait afficher le contenu complet (un var_dump) de la session entre ces 2 cas figure : personne lambda et personne identifiée. En admettant que tu parvienne à repérer un élément, et bien il suffit de le rajouter comme condition/alternative restrictive pour mettre à jour les stats. Ou alors, tu créé toi même cette donnée pour pouvoir t'appuyer dessus. Au moment ou tu mets à jour cette stat, tu créé cette variable de session. $_SESSION['is_logged'] = true; Suffit après de rajouter cette condition en vérifiant sont existance : Code :
if (isset($_SESSION['is_logged]') && $_SESSION['is_logged'] === true) { // Personne déjà identifiée : Pas de mise à jour des stats. } else { // Personne pas encore identifié : Mise à jour des stats $_SESSION['is_logged'] = true; } C'est une idée
__________________
Win XP | WampServer 2.0 | Apache 2.2.11 | Php 5.3.0 | MySQL 5.1.36 Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
|
|
|
#14 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Localisation: Là où il y a du calvados
Âge: 25
Messages: 55
|
Désolé je m'exprime peut être mal pis en plus je ne peux pas modifier le code c'est une société externe qui développe notre site mois je récupère juste en interne la table stats et la travail en local avec xampp.
Il n'y a pas de problème sur l'identification des personnes, le soucis est juste que si le client clic 2 fois sur le bouton valider du formulaire de commande par exemple et bien ca me créé 2 enregistrements dans ma table stats avec une quinzaine de secondes d'intervalle maxi et c'est ca le problème, je voudrais pouvoir comptabiliser ces enregistrements en supprimant tout les doublons d'opérations du à un double clic, enfin après avoir cliqué 2 fois à quelques secondes d'intervalle sur ce même bouton alors qu'au final je n'ai qu'une seul commande. Je ne peux me baser que sur cette table là donc pas possible d'aller récupérer le nombre de commande et c'est plus compliqué que ca, la commande n'est qu'une illustration de mon problème. En fait quand je fais ma requête d'affichage des lignes de tableau puis du calcul du nombre de ligne, je voudrait qu'à chaque ligne ca test le date-time de la ligne précédente pour un même login et si la différence est inferieur à 20 secondes je le zappe sinon je l'ajoute si tu comprend mieux ce que je veux dire. |
|
|
|
|
|
#15 (permalink) |
![]() |
Et bien comme je l'ai suggéré plus haut, il faut nettoyer la table.
Voir mon message précédent.
__________________
Philippe Leménager. Futur ingénieur CNAM, ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) |
|
|
|
|
|
![]() |
||
Requête avec filtrage selon date
|
||
| Outils de la discussion | |
|
|