IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Compter le nombre d'occurrences par entrées


Sujet :

MySQL

  1. #1
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut Compter le nombre d'occurrences par entrées
    Salutations,

    j'essaye depuis des heures, mais n'arrive pas à pondre un truc fonctionnel.

    Je cherche à faire un tableau automatique, qui me sort des stats sur une table.

    Les champs recherchés dans la table SQL sont :
    - MailTrans : L'adresse mail de l'utilisateur du ticket
    - DateOk : La date de cloture du ticket

    Je voudrais qu'un tableau se crée tout seul avec le nombre de fois que chaque utilisateur (via son mail) à été enregistré, et en face le nom de clotures de cet utilisateur.
    Il n'y à pas de base de nom d'utilisateurs pré-définie. Le champs mail utilisateurs est libre. Il peut donc y avoir des erreurs de saisies.

    Ex :

    - toto@titi.com renseigné 6 fois | 4 Fois cloturé
    - robert@hue.com renseigné 12 fois | 0 fois cloturé
    - ...

    Pourriez-vous m'aider ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Bonjour,
    Tu peux faire un count(distinct) sur la colonne DateOk, en regroupant le tout sur MailTrans.

    Tatayo.

  3. #3
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Totalement incapable de pondre une telle syntaxe ...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 081
    Points : 30 827
    Points
    30 827
    Par défaut
    COUNT et GROUP BY devraient suffire à répondre à ton besoin.
    Qu'as-tu déjà essayé et quels problèmes rencontres-tu avec ces essais ? Des messages d'erreur ? Un résultat erroné ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Très clairement, aucun rendu. Je n'arrive mm pas a sortir une variable.
    Il me faudrait un angle de travail.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Tiens, deux liens qui devraient t'aider à commencer:
    Count()
    Group by()

    Tu peux aussi nous montrer les requêtes que tu as tentées, on pourra t'aider à les corriger.

    Tatayo.

  7. #7
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    C'est surtout la syntaxe du select que je dois initier.
    Après je suppose qu'avec un for each ça devrait passer.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Justement la syntaxe est donnée dans l'un des deux liens.
    Pour le for each, on sort de la partie SQL, donc il faudra voir dans la bonne section du forum.

    Tatayo.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 143
    Points : 38 917
    Points
    38 917
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par Casio Voir le message
    C'est surtout la syntaxe du select que je dois initier.
    Après je suppose qu'avec un for each ça devrait passer.
    Ne pas confondre "initier" et "commencer", "engager", "amorcer..."
    initier c'est enseigner à autrui, c'est en anglais que initiate peut vouloir dire "commencer"
    cf. https://www.cnrtl.fr/definition/initier ou encore https://www.larousse.fr/encyclopedie...cher?q=initier

    Après cette parenthèse sémantique, voici un exemple d'utilisation dans lequel j'ai supposé que la colonne "DateOK" était marquée "null" tant que le ticket n'était pas clôturé. A adapter si besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select nom_utilisateur
         , mailtrans
         , count(*)
    from ma_table
    where DateOK is not null
    group by nom_utilisateur
           , mailtrans
    order by nom_utilisateur
           , mailtrans

    Citation Envoyé par tatayo Voir le message
    Justement la syntaxe est donnée dans l'un des deux liens.
    Pour le for each, on sort de la partie SQL, donc il faudra voir dans la bonne section du forum.
    Sauf qu'un for each requière une requête non ensembliste pour un traitement ligne à ligne avec des allers retours entre la base de données et l'application et donc une solution beaucoup moins performante qu'une requête ensembliste avec un GROUP BY

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    escartefigue : j'avais interprété le for each comme étant le parcours des lignes du résultat dans le programme final, d'où ma remarque sur la section du forum (pour le renvoyer vers la section PHP, Python...).
    Il faut bien à un moment ou un autre lire les lignes renvoyées pour les traiter

    Tatayo

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 143
    Points : 38 917
    Points
    38 917
    Billets dans le blog
    9
    Par défaut
    C'est pas faux... et j'ai tout compris

  12. #12
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,
    (...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select nom_utilisateur
         , mailtrans
         , count(*)
    from ma_table
    where DateOK is not null
    group by nom_utilisateur
           , mailtrans
    order by nom_utilisateur
           , mailtrans
    (...)
    Ce qui me donne donc :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $BeneOk = $connexion->query ("SELECT mailtrans, count(*) FROM $table where DateOK is not null group by mailtrans order by mailtrans)");

    Pour les DateOk

    Et pour les autres :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $BeneWait = $connexion->query ("SELECT mailtrans, count(*) FROM $table where DateOK is null group by mailtrans order by mailtrans)");

    ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Attention, tu s une parenthèse de trop dans tes deux requêtes.

    Si tu as systématiquement besoin des deux résultats, tu peux le faire dans une seule requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT mailtrans, sum(isnull(dateok),0,1) as DatePasNull,sum(isnull(dateok),1,0)) as DateNull as FROM $table group by mailtrans order by mailtrans
    IsNull renvoie vrai si le paramètre est null, sinon faux.
    Donc ici pour la première colonne, je vérifie DateOK est null. Si oui je "convertis" en 0 sinon en 1. Je fais la même chose ensuite, mais en inversant les deux valeurs.
    Il ne reste plus qu'à faire la somme en regroupant sur mailtrans, et le tour est joué.
    Pour mieux comprendre la logique qui se cache derrière, tu peux enlever les sum et le group by, et en ajoutant la colonne DateOK dans le select.

    Tatayo.

  14. #14
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Je dois avoir un pb de syntaxe :

    Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool in app-benevoles.php:53 Stack trace: #0 {main} thrown in app-benevoles.php on line 53
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	// Requetes SQL
    	$Benevoles = $connexion->query ("SELECT MailTrans, sum(isnull(DatOk),0,1) as Clos, sum(isnull(DatOk),1,0)) as Ouvert, sum(isnull(DatSuppr),0,1) as Suppr as FROM $table group by MailTrans order by MailTrans)");

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	<?php
    		// On fait une boucle qui va faire un tour pour chaque enregistrement
    		while ($data = $Benevoles->fetch_assoc())
    			{
    			// On affiche les informations de l'enregistrement en cours
    			?>
    				<tr valign="bottom">
    					<td align="center"><?php echo $data['MailTrans']; ?></td>
    					<td align="center"><?php echo $data['Clos']; ?></td>
    					<td align="center"><?php echo $data['Ouvert']; ?></td>
    					<td align="center"><?php echo $data['Suppr']; ?></td>
    				</tr>
    			<?php
    			}
    	?>

    Edit : Modif.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 143
    Points : 38 917
    Points
    38 917
    Billets dans le blog
    9
    Par défaut
    La chaîne de caractères entre doubles quotes ne doit pas contenir de variables : le nom de la table $table doit être concaténé entre le début et la fin de la requête, sans quoi il est considéré lui même comme chaîne de caractères.

  16. #16
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	// Requetes SQL
    	$Benevoles = $connexion->query ("SELECT MailTrans, sum(isnull(DatOk),0,1) as Clos, sum(isnull(DatOk),1,0)) as Ouvert, sum(isnull(DatSuppr),0,1) as Suppr as FROM \"$table\" group by MailTrans order by MailTrans)");

    Cela ne change visiblement rien ...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  17. #17
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Ou ai-je cafouillé ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 203
    Points : 12 781
    Points
    12 781
    Par défaut
    Je ne connais pas PHP, mais je ne vois pas code qui lance la requête.
    Est-ce que exécute bien ta requête ?
    Est-ce que tu vérifies bien le retour ?
    Est-ce que tu as un message d'erreur ?

    Tatayo.

  19. #19
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Aucun idée ?
    Je suis un peu paumé, la ...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  20. #20
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Attention, tu s une parenthèse de trop dans tes deux requêtes.

    Si tu as systématiquement besoin des deux résultats, tu peux le faire dans une seule requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT mailtrans, sum(isnull(dateok),0,1) as DatePasNull,sum(isnull(dateok),1,0)) as DateNull as FROM $table group by mailtrans order by mailtrans
    Tatayo.
    Bonjour Tatayo, il y a des erreurs dans ta requête :
    1. as from
    2. sum(isnull(dateok),1,0))

Discussions similaires

  1. [XL-2003] Compter le nombre de jours par mois entre deux dates
    Par Mikayel dans le forum Excel
    Réponses: 8
    Dernier message: 23/09/2016, 13h36
  2. Réponses: 2
    Dernier message: 13/07/2009, 16h54
  3. Compter le nombre de jours écoulés entre deux dates
    Par koKoTis dans le forum VBScript
    Réponses: 8
    Dernier message: 07/08/2006, 19h44
  4. Compter le nombre de page par regroupement
    Par bondyfalat dans le forum Access
    Réponses: 2
    Dernier message: 01/03/2006, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo