Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

j'ai un tableau donnant les heures de travaux des différents agents sur un site et j'aimerai faire une requette qui me donne le temps mis par personne sur chaque site voila ce que j'ai comme données

nom code temps_work date_work operation site
user1 001 12h10 11/01/2018 connexion au site
user1 001 12h15 11/01/2018 en poste
user1 001 12h50 11/01/2018 deconnexion
user1 001 13h10 11/01/2018 connexion au site
user1 001 14h10 11/01/2018 en poste
user2 002 12h10 11/01/2018 connexion au site
user2 002 12h15 11/01/2018 en poste
user2 002 12h50 11/01/2018 deconnexion
user2 002 13h10 11/01/2018 connexion au site
user3 003 14h10 11/01/2018 en poste
user3 003 12h10 11/01/2018 connexion au site
user3 003 12h15 11/01/2018 en poste
user3 003 12h50 11/01/2018 deconnexion
user3 003 13h10 11/01/2018 connexion au site
user3 003 14h10 15/01/2018 en poste
user4 004 14h10 15/01/2018 en poste
user4 004 12h10 15/01/2018 connexion au site
user4 004 12h15 15/01/2018 en poste
user4 004 12h50 15/01/2018 deconnexion
user4 004 13h10 15/01/2018 connexion au site
user4 004 14h10 15/01/2018 en poste

Ce que je veux

Je veux une requete qui va me permettre d'obtenir un tableau avec le temps total passé par utilisateur sur le site

Quelqu'un a une idée?SVP

7 réponses


romses
Auteur

Personne n'a encore eu a gérer ce cas? SVP

Bonjour.
Pour éviter les complications, tu devrais plutôt sauvegarder sous le format datetime, ce qui te permettra de pouvoir mieux travailler ce type de données, ensuite pourquoi faire plusieurs lignes pour une même connexion ?
Je te conseillerais de créer des champs par exemple : login_at, poste_at, __logout_at__, de type datetime à la place de tes champs temps_work, date_work operation site(?).

  • Lorsque l'utilisateur se connecte, tu crées un nouvel enregistrement en assignant la valeur du champ __login_at__.
  • Lorsque l'utilisateur est considéré comme être en poste, tu assignes la valeur du champ __poste_at__.
  • Lorsque l'utilisateur se déconnecte, tu assignes la valeur du champ __logout_at__.

Car le problème avec ta méthode actuelle, c'est que tu vas avoir 3 fois plus d'enregistrements pour chaque utilisateur, alors que là, il n'aura qu'un enregistrement à chaque fois qu'un utilisateur se connecte et il sera plus simple de sélectionner le dernier enregistrement créé pour un utilisateur, que de devoir en sélectionner 3 par utilisateur.

romses
Auteur

Merci Lartak sauf en effet les informations viennent d'une base de donnée déjà programmé en système je veux dire que je ne peux modifier la structure de la base de donnée car ç'est la base de données d'un pointeur d'empreinte digital donc on m'a demandé je peux faire une requete SQL pour ressortir la durée de travail des utilisateurs sur sur le site.

Étant donné que le format des dates et heures ne correspond pas à la norme de SQL, ça m'étonnerait que tu puisse faire ça juste dans la requête SQL, il te faudra forcément le faire après le traitement de la requête SQL.

romses
Auteur

Ok su possons cela soit possible que j echange le format moon soucis se trouve au niveau de la requete qui va ressortir cela je ne sais pas ssi vous comprennez un peu je n'arrive pas à trouvé la requette qui va me ressortir le temps mis par chaqu'un site sur un site

Il y a un second problème dans la struture de cette table, c'est le fait qu'il n'y ait pas d'identifiant unique pour chaque session, c'est à dire qui permettrait de différencier la seconde ligne et la quatrième par exemple, étant donné que ces deux lignes correspondent à un même utilisateur.
Du coup je ne vois pas comment tu pourrais faire regrouper les trois premières lignes ensembles sans que les deux suivantes soient prises en compte.
Tout du moins avec la structure actuelle de la table.

Bonjour.

Je suis nouvel utilisateur

Je ne sais pas ce que tu appelles exactement nouvel utilisateur, mais quand je vois :

Inscrit Il y a 2 mois

Pour moi ça ne signifie pas nouvel utilisateur.

Je dois calculer la différence entre la dernière ligne et l'avant dernière d'une colonne, puis mettre le résultat dans une autre colonne.

Commences déja par nous montrer la structure de la table concernée et pas seulement le nom des colonnes, mais également leur type de donnée.
Par contre, ce que tu demandes, ce serait de faire un update ainsi qu'un select de deux lignes en un seul appel à la base de données.
Sauf qu'un update et un select dans une même table via un seul appel à la base de données, est techniquement infaisable :

Limitation des sous-requêtes dans un UPDATE

Une limitation importante des sous-requêtes est que l'on ne peut pas modifier un élément d'une table que l'on utilise dans une sous-requête.
Exemple : vous trouvez que Callune ressemble quand même fichtrement à Cawette, et ses poils sont aussi longs. Vous vous dites donc que vous auriez dû également modifier la race de Callune. Vous essayez donc la requête suivante :

UPDATE Animal SET race_id = 
(SELECT race_id FROM Animal WHERE nom = 'Cawette' AND espece_id = 2)
WHERE nom = 'Callune';

Malheureusement :

ERROR 1093 (HY000): You can't specify target table 'Animal' for update in FROM clause

La sous-requête utilise la table Animal. Or, vous cherchez à modifier le contenu de celle-ci. C'est impossible !
Source: Jointures et sous-requêtes : modification de données - Administrez vos bases de données avec MySQL - OpenClassrooms.