Elimination Doublons
Bonjour tout le monde.
Je développe en PHP Mysql une application pour la gestion des présence des employés.
Les employés pointent avec leurs badges à l'arrivée et à la sortie.
Ces informations sont transmises ensuite vers un fihier Execl qui regroupe Nom Prénom Date et les heures.
Des fois par manque d'attention, les employés pointent 2 fois l'arrivée
ou la sortie avec un intervalle de quelques secondes.
J'a pu importer les données du fichier Excel sur ma base de données.
Mais je souhaiterais éliminer les doublons.
PS :Un doublon c'est quand il s'agit de la même personne mais la différence des heures est inférieure à 15 secondes.
La structure de ma table est
Nom Prénom, Date et Heure.
Donc en Gros, pour chaque Nom je souhaiterais comparer les heures et éliminer ensuite l'heure la plus récente.
Merci de votre aide
Je développe en PHP Mysql une application pour la gestion des présence des employés.
Les employés pointent avec leurs badges à l'arrivée et à la sortie.
Ces informations sont transmises ensuite vers un fihier Execl qui regroupe Nom Prénom Date et les heures.
Des fois par manque d'attention, les employés pointent 2 fois l'arrivée
ou la sortie avec un intervalle de quelques secondes.
J'a pu importer les données du fichier Excel sur ma base de données.
Mais je souhaiterais éliminer les doublons.
PS :Un doublon c'est quand il s'agit de la même personne mais la différence des heures est inférieure à 15 secondes.
La structure de ma table est
Nom Prénom, Date et Heure.
Donc en Gros, pour chaque Nom je souhaiterais comparer les heures et éliminer ensuite l'heure la plus récente.
Merci de votre aide
5 réponses
-
bonjour
avec access, on peut faire une recherche de doublon a l'aide d'une requete -
Contributeurbonjour, suggestion:
delete p1 FROM `pt` as p1, pt as p2 WHERE p1.nom=p2.nom and p1.prenom=p2.prenom and p1.moment>p2.moment and p1.moment-p2.moment<15
-
-
Contributeur@Hichamus13"ça ne marche pas": message d'erreur?
-
-
Contributeur@Hichamus13select p1.* FROM `pt` as p1, pt as p2
WHERE p1.nom=p2.nom and p1.prenom=p2.prenom
and p1.moment>p2.moment and p1.moment-p2.moment<15
-
-
ModérateurJe n'utilise pas mysql, ni php
Mais avant de tenter dans php, tu devrais tester le sql dans la console mysql en direct.
En général, on évite d'appeler un champ date, c'est souvent un mot réservé. Et ton champ il est de quel type ? chaine de caractère ou datetime ? car normalement dans le sql il y a de quoi effectuer des opérations sur les champs datetime, ce n'est pas pratique d'utiliser une chaine de caractère.
-
Merci pour ta réponse rapide.
Cette fonction permet de convertir les heures en secondes.
function heure_to_secondes($heure){ $array_heure=explode(":",$heure); $secondes=3600*$array_heure[0]+60*$array_heure[1]+$array_heure[2]; return $secondes; }
Dans le tableau que je reçois, il ya que deux colomnes : Date avec regroupés Date + Heure et description regroupant Nom et Prénom
J'ai utilisé ton code dans cette manière :
$connect = mysqli_connect("localhost", "root", "", "employe"); $query="DELETE FROM tbl_excel A WHERE EXISTS ( SELECT *, substr(date, 1, 10), substr(date, 11, 20) FROM tbl_excel B WHERE A.description = B.description AND A.substr(date, 11, 20) > B.substr(date, 11, 20) AND heure_to_secondes(A.substr(date, 11, 20)) - heure_to_secondes(A.substr(date, 11, 20)) <=15 "; $result = mysqli_query($connect, $query);
Mais cela me sort l'erreur unexpected '*', expecting end of file -
ModérateurBonjour,
Une piste de solution, à compléter car j'ignore comment faire + 15s avec mysql :
DELETE FROM pointage A WHERE EXISTS (SELECT * FROM pointage B WHERE A.nom = B.nom AND A.prenom = B.prenom AND A.date_heure > B.date_heure AND A.date_heure <= B.date_heure + 15s)
Un identifiant de salarié, qui doit exister dans un logiciel de pointage, serait plus pratique que nom prénom. Et il n'y a pas un indicateur entrée/sortie dans ton pointage qui devrait être lui aussi testé ?
Cdlt