Elimination Doublons

Fermé
Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020 - 25 oct. 2018 à 11:00
 castours - 26 oct. 2018 à 07:34
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

5 réponses

jee pee Messages postés 40279 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 29 septembre 2024 9 350
Modifié le 25 oct. 2018 à 11:52
Bonjour,

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
1
Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020
Modifié le 25 oct. 2018 à 12:57
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
0
jee pee Messages postés 40279 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 29 septembre 2024 9 350
25 oct. 2018 à 12:53
Je 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.

0
Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020
25 oct. 2018 à 12:58
C'est effectivement une chaine de caractère.
Mais j'ai fait le test avec la fonction Heure_to_secondes, elle marche.
Merci
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
25 oct. 2018 à 13:27
bonjour, 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
0
Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020
25 oct. 2018 à 13:39
Bonjour,
ça ne marche pas nom plus
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538 > Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020
25 oct. 2018 à 14:36
"ça ne marche pas": message d'erreur?
0
Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020
25 oct. 2018 à 17:21
La syntaxe de la requete n'est pas bonne. Il faut vérifier le manuel.
Dans un premier temps je souhaiterais seulement afficher les doublons. Je les effacerai manuellement aprés
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538 > Hichamus13 Messages postés 15 Date d'inscription jeudi 18 octobre 2018 Statut Membre Dernière intervention 12 juin 2020
25 oct. 2018 à 17:50
select 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour
avec access, on peut faire une recherche de doublon a l'aide d'une requete
0