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

Langage SQL Discussion :

Requête fréquence visite


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut Requête fréquence visite
    Bonjour à tous,

    Je voudrais effectuer une requête sur la fréquence de visite mais je sèche un peu.

    J'ai une table enseigne, une table magasin (chaque magasin est obligatoirement liée à une enseigne) et une table visite (a chaque visite j'enregistre la date et l'id du magasin).

    A partir de ces trois tables je souhaiterais faire une requête qui me donne le nombre de magasin par enseigne visité une fois, deux fois et trois fois et plus.

    Ci dessous ma requête pour sortir le nombre de visite par enseigne, j'essaye de l'apdapter mais pas si facile pour moi... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT e.nom_enseigne, m.ville, COUNT(p.id_planning) AS nb_planning
    FROM  planning p
     
    JOIN magasin m
    ON m.id_magasin=p.id_mag
     
    JOIN enseigne e
    ON m.enseigne=e.id_enseigne
     
    GROUP BY m.enseigne
    Merci d'avance de votre aide.

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à dam28800
    bonjour,

    je vais essayer de t'aider mais avant j'aimerai comprendre 2-3 petite chose :
    1)
    A partir de ces trois tables je souhaiterais faire une requête qui me donne le nombre de magasin par enseigne visité une fois, deux fois et trois fois et plus.
    tu veux avoir une colonne par nombre de fois c'est à dire qu'on aura 4 colonne : "1fois", "2fois", "3fois", "plus", c'est ça??
    Si ce n'est pas ça fais moi un exemple rapide de ce que tu souhaite comme résultat.
    2) dans ta requête, je t'apporte une modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT e.nom_enseigne, m.ville, COUNT(p.id_planning) AS nb_planning
    FROM  planning p
     
    JOIN magasin m
    ON m.id_magasin=p.id_mag
    							
    JOIN enseigne e
    ON m.enseigne=e.id_enseigne
    	
    GROUP BY m.enseigne, e.nom_enseigne, m.ville
    A SAVOIR : Lorsque tu as une fonction d'agrégat (ici COUNT) tu doit mettre les champs qui ne participe pas à la fonciton dans ton GROUP BY.

    A quoi correspond m.enseigne?? c'est la même chose que e.nom_enseigne??

    3) Ton SGBD, t'affiche un message d'erreur ou autre?? explique moi plus ton problème s'il te plais.

    Cordialement.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut
    Bonjour et merci pour ton aide,

    tu veux avoir une colonne par nombre de fois c'est à dire qu'on aura 4 colonne : "1fois", "2fois", "3fois", "plus", c'est ça??
    Effectivement c'est ça que je veux.

    Ton SGBD, t'affiche un message d'erreur ou autre?? explique moi plus ton problème s'il te plais.
    Non en fait il ne me met pas de message d'erreur mais la requête me sort le nombre de visite total par enseigne.

    Alors que je souhaite le nombre de fréquence de visite magasin par enseigne.

    Merci d'avance pour ton aide.

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à dam28800
    Ok.

    La comme ça à froid je voit pas trop, je vais essayer d'y réfléchir et je te tiens au courant.

    Essaye de ton côté de faire petit à petit, étape par étape.

    Bon courage.

    @++

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut
    Et oui dès 8H30 c'est chaud !

    Je regarde de mon côté, si je fais des sous requête qui me compte combien de magasin ont été visité une fois, puis une autre pour deux fois et une autre poour trois fois... et que je regroupe par enseigne... je regarde ça ...

    Merci encore.

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à dam28800
    Oui je pense que tu devrait au résultat avoir une requête avec des requêtes imbriqué (une pour chaque colonne de nombre de visite)

    Enfin je vois ça comme ça.

    Courage.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Salut,
    Quel est ton sgbd?

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut
    Il s'agit de MySQL.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Peut etre comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    select e.nom_enseigne, V1.id_magasin as UneVisite, V2.id_magasin as DeuxVisites, V3.id_magasin as TroisEtPlus
    from enseigne e
    left outer join 
    	 ( select m.id_enseigne, m.id_magasin, COUNT(p.id_planning)
    	   from magasin m
    	   join planning p
    	   on p.id_mag = m.id_magasin
    	   group by m.id_enseigne, m.id_magasin
    	   having COUNT(p.id_planning) = 1
    	 ) V1
    on e.id_enseigne = V1.id_enseigne
    left outer join
    	 ( select m.id_enseigne, m.id_magasin, COUNT(p.id_planning)
    	   from magasin m
    	   join planning p
    	   on p.id_mag = m.id_magasin
    	   group by m.id_enseigne, m.id_magasin
    	   having COUNT(p.id_planning) = 2
    	 ) V2
    on e.id_enseigne = V2.id_enseigne
    left outer join
    	 ( select m.id_enseigne, m.id_magasin, COUNT(p.id_planning)
    	   from magasin m
    	   join planning p
    	   on p.id_mag = m.id_magasin
    	   group by m.id_enseigne, m.id_magasin
    	   having COUNT(p.id_planning) >= 3
    	 ) V3
    on e.id_enseigne = V3.id_enseigne;
    La structure de tes tables serait un plus, j'ai cru voir que pour un magasin tu affiches une ville, ça signifie que tu as au plus un magasin par ville?
    Dans mon exemple j'ai préféré utiliser id_magasin.

    Edit : j'avais oublié la dernière condition de jointure dans ma requete

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Je verrais plutôt un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT count(id_magasin), id_enseigne, nom_enseigne, ville, nb_planning
    FROM
    (
    SELECT m.id_magasin, e.id_enseigne, m.ville, COUNT(p.id_planning) AS nb_planning
    FROM  planning p
    JOIN magasin m
    ON m.id_magasin=p.id_mag
    JOIN enseigne e
    ON m.enseigne=e.id_enseigne
    GROUP BY m.id_magasin, e.id_enseigne, e.nom_enseigne, m.ville
    ) nbvisites
    GROUP BY id_enseigne, nom_enseigne, ville, nb_planning

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Bonjour,

    je suis d'accord avec Snipah sur sa solution.

    Je pense que Az2000 c'est une bonne solution mais tu ne gère pas les colonnes souhaité (1, 2, 3, plus de 3...)

    Tu as réussit Dam28800?? Si oui, oublie pas de mettre ce sujet en

    Bonne continuation

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Comme je souhaite gérer les colonnes je prend la requête de Snipah.

    Voilà ce que ça donne (elle est plus courte volontairement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT e.nom_enseigne, V1.id_magasin AS UneVisite
    FROM enseigne e
    LEFT OUTER JOIN 	 						
    ( SELECT m.enseigne, m.id_magasin, COUNT(p.id_planning)
     FROM magasin m
    JOIN planning p
     ON p.id_mag = m.id_magasin
     GROUP BY m.enseigne, m.id_magasin
     HAVING COUNT(p.id_planning) = 1
     ) V1
    ON e.id_enseigne = V1.enseigne

    Elle fonctionne très bien mais ne donne pas tout a fait le résultat que je souhaiterai.
    En effet elle va m'afficher les identifiants magasin ou il y a eu une visite.
    Si pour une même enseigne j'ai deux magasins qui ont été visité une fois cela va m'afficher :

    Enseigne #1 | Id_mag#1
    Enseigne #1 | Id_mag#2

    Je souhaiterai :

    Enseigne #1 | 2 (correspond au nb de magasin de l'enseigne visité une fois)

    Il faudrait ajouter un count quelque part mais je vois pas trop ou...

    Merci d'avance de votre aide.

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à dam28800
    Bonjour,

    si tu fais la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT e.nom_enseigne, V1.id_magasin AS UneVisite, COUNT(id_magasin)
    FROM enseigne e
    LEFT OUTER JOIN 	 						
    ( SELECT m.enseigne, m.id_magasin, COUNT(p.id_planning)
     FROM magasin m
    JOIN planning p
     ON p.id_mag = m.id_magasin
     GROUP BY m.enseigne, m.id_magasin
     HAVING COUNT(p.id_planning) = 1
     ) V1
    ON e.id_enseigne = V1.enseigne
    GROUP BY e.nom_enseigne, UneVisite
    est-ce que cela te donne ce que tu souhaite??
    (je suis pas sûr de moi mais qui tente rien à rien dans la vie.)

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    J'aurai plutot dit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT e.nom_enseigne, COUNT(V1.id_magasin) AS UneVisite
    FROM enseigne e
    LEFT OUTER JOIN 	 						
    ( SELECT m.enseigne, m.id_magasin, COUNT(p.id_planning)
     FROM magasin m
    JOIN planning p
     ON p.id_mag = m.id_magasin
     GROUP BY m.enseigne, m.id_magasin
     HAVING COUNT(p.id_planning) = 1
     ) V1
    ON e.id_enseigne = V1.enseigne
    GROUP BY e.nom_enseigne

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Ah ben oui tu as raison Snipah, pourquoi rajouter une colonne alors qu'on a déja id_magasin.

    Suis pas réveillé dit donc, va vraiment falloir que je me réveille.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut
    Merci de votre aide, voilà donc la requête que j'execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SELECT e.nom_enseigne, COUNT( V1.id_magasin ) AS UneVisite, COUNT( V2.id_magasin ) AS DeuxVisite, COUNT( V3.id_magasin ) AS TroisVisite
    FROM enseigne e
    LEFT OUTER JOIN (
     
    SELECT m.enseigne, m.id_magasin, COUNT( p.id_planning ) 
    FROM magasin m
    JOIN planning p ON p.id_mag = m.id_magasin
    GROUP BY m.enseigne, m.id_magasin
    HAVING COUNT( p.id_planning ) =1)V1 ON e.id_enseigne = V1.enseigne
    LEFT OUTER JOIN (
     
    SELECT m.enseigne, m.id_magasin, COUNT( p.id_planning ) 
    FROM magasin m
    JOIN planning p ON p.id_mag = m.id_magasin
    GROUP BY m.enseigne, m.id_magasin
    HAVING COUNT( p.id_planning ) =2)V2 ON e.id_enseigne = V2.enseigne
    LEFT OUTER JOIN (
     
    SELECT m.enseigne, m.id_magasin, COUNT( p.id_planning ) 
    FROM magasin m
    JOIN planning p ON p.id_mag = m.id_magasin
    GROUP BY m.enseigne, m.id_magasin
    HAVING COUNT( p.id_planning ) =3)V3 ON e.id_enseigne = V3.enseigne
    GROUP BY e.nom_enseigne
    Mes données dans ma tables visite pour l'enseigne #1 :

    Enseigne #1 | Mag #1
    Enseigne #1 | Mag #1
    Enseigne #1 | Mag #2
    Enseigne #1 | Mag #3
    Enseigne #1 | Mag #3

    A l'écran ça me donne
    Enseigne | 1 Viste | 2 visites | 3 visites
    Ensegines#1| 2 | 2 | 0

    Il doit y avoir un petit problème mais je ne vois pas ou....

    Merci d'avance.

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Peux tu détailler les données de tes différentes tables s'il te plait?

  19. #19
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Points : 69
    Points
    69
    Par défaut
    Voilà ma table planning :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE `planning` (
      `id_planning` mediumint(8) unsigned NOT NULL auto_increment,
      `id_util` tinyint(3) unsigned NOT NULL default '0',
      `id_mag` smallint(5) unsigned NOT NULL default '0',
      `autre` char(1) NOT NULL default '',
      `date_rdv` date NOT NULL default '0000-00-00',
      `semaine` tinyint(2) unsigned NOT NULL default '0',
      `date_saisie` date NOT NULL default '0000-00-00',
      `heure_saisie` time NOT NULL default '00:00:00',
      `etat_planning` char(1) NOT NULL default '',
      PRIMARY KEY  (`id_planning`),
      KEY `id_util` (`id_util`),
      KEY `id_mag` (`id_mag`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    --
    -- Contenu de la table `planning`
    --

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO `planning` VALUES (1, 1, 11, '', '2009-02-01', 5, '2009-02-24', '08:57:19', 'E');
    INSERT INTO `planning` VALUES (2, 1, 56, '', '2009-02-01', 5, '2009-02-24', '09:01:11', 'E');
    INSERT INTO `planning` VALUES (3, 1, 11, '', '2009-02-02', 6, '2009-02-24', '09:03:46', 'E');
    INSERT INTO `planning` VALUES (4, 1, 56, '', '2009-02-02', 6, '2009-02-24', '09:57:41', 'E');
    INSERT INTO `planning` VALUES (8, 1, 22, '', '2009-02-02', 6, '2009-02-24', '10:07:35', 'E');
    Les magasins sont tous de la même enseigne.

    Merci.

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Essaie de mettre un distinct dans tes count.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT e.nom_enseigne, COUNT( DISTINCT V1.id_magasin ) AS UneVisite, COUNT( DISTINCT V2.id_magasin ) AS DeuxVisite, COUNT( DISTINCT V3.id_magasin ) AS TroisVisite

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. fréquence d’accès requête
    Par CssFaxien dans le forum Administration
    Réponses: 15
    Dernier message: 21/10/2010, 16h38
  2. [MySQL] Lancer une requête à fréquence fixe
    Par bullrot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/05/2009, 18h37
  3. [SQL] Requête SQL de fréquence
    Par dam28800 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/02/2008, 13h55
  4. [SQL] Requête qui montre les 5 pages les plus visitées
    Par plex dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 28/07/2006, 17h01
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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