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 :

Aide pour une requête


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Traffic manager
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Traffic manager

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Aide pour une requête
    Bonjour les amis,

    J'ai besoin d'aide pour une requête :

    Dans la base de données, il y a des utilisateurs et des contacts.

    Un utilisateur peut être composé de plusieurs contacts, un contact étant une visite effectuée sur le site par l'utilisateur.

    J'aimerais afficher tous les contacts de tous les utilisateurs ayant effectué une action.

    Exemple en tableau :

    Utilisateur_ID Contact_ID Date_creation_contact Date_mise_a_jour Action_effectuee
    1 1 2015-03-12 23:04:12 2015-03-12 23:06:15 Non
    1 2 2015-03-17 18:32:00 2015-03-17 18:36:54 Non
    1 3 2015-03-21 05:55:12 2015-03-21 06:02:17 Oui

    Comment pourrais-je faire ça ?

    Merci !

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Soit y'a un truc que j'ai pas compris, soit vous n'avez jamais fait de SQL.

    La solution que je vais proposée est juste le b.a.-ba du SQL et je vous conseille donc fortement de lire au moins un tuto sur le sujet.


    A tester, et si ca fonctionne comme vous l'entendez, jetez vous de suite sur un tuto pour comprendre comment ca fonctionne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Utilisateur_ID, Contact_ID, Date_creation_contact, Date_mise_a_jour, Action_effectuee 
    from votre_table_dont_jignore_le_nom --mettez le nom qui va bien ici 
    where Action_effectuee = 'Oui'
    ;

  3. #3
    Candidat au Club
    Homme Profil pro
    Traffic manager
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Traffic manager

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Non ce n'est pas ça du tout.

    Si je mets "WHERE action = oui", ça n'affiche que les lignes avec "oui". Alors que je veux les lignes qui ont action "oui" et "NULL", mais que chez les users qui ont au moins un oui.

    Le tableau est le résultat que je veux afficher.

    C'est-à-dire que tous les users qui n'ont jamais effectué d'action ne s'affichent pas, et pour ceux qui ont effectué au moins une action, je veux afficher toutes leurs sessions ("contact"), qu'il y ait une action ou pas.

  4. #4
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Vous êtes sous quel sgbd ?

    selon la base, on peut proposer des solutions plus ou moins adaptées.


    De manière général, ca, ca a des chances de fonctionner :
    • Vous créez une requete qui sort la liste de utilisateur qui ont on fait une action, un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select Utilisateur_ID 
    from les_tqbles_qui_vont_bien 
    where Action_effectuee  = 'oui'
    • Vous utilisez cette requete dans le where de votre grosse requete. un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select Utilisateur_ID, Contact_ID, Date_creation_contact, Date_mise_a_jour, Action_effectuee 
    from votre_table_dont_jignore_le_nom --mettez le nom qui va bien ici 
    where Utilisateur_ID in ("select précédent")
    ;

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    donc visiblement, les valeurs possibles pour action sont "NON", "OUI" et null, en ce cas la requete est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select Utilisateur_ID 
    from ma_table as main
    where (Action_effectuee  = 'oui'  or Action_effectuee is null)
      and exists
           (select 1 from ma_table as subq
            where subq.Utilisateur_ID = main.Utilisateur_ID 
                and Action_effectuee ="OUI")

  6. #6
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    C'est pas très clair tout ca.

    Avec ta requete escartefigue tu vas pas avoir le même résultat que le tableau, puisque tu filtres les NON lol ^^
    mais c'est peut-etre ce qu'il faut faire. et si c'est ca, je comprends plus rien XD

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par escartefigue
    Euh... Le besoin est celui-ci :
    Citation Envoyé par NicolasSarutobi
    J'aimerais afficher tous les contacts de tous les utilisateurs ayant effectué une action.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t1.Utilisateur_ID, t1.Contact_ID
    FROM la_table t1
    WHERE EXISTS
    (
    	SELECT *
    	FROM la_table t2
    	WHERE t2.Utilisateur_ID = t1.Utilisateur_ID
    		AND Action_effectuee = 'Oui'
    )
    ORDER BY t1.Utilisateur_ID, t1.Contact_ID
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    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 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bstevy Voir le message
    C'est pas très clair tout ca.

    Avec ta requete escartefigue tu vas pas avoir le même résultat que le tableau, puisque tu filtres les NON lol ^^
    mais c'est peut-etre ce qu'il faut faire. et si c'est ca, je comprends plus rien XD
    Non car il y des lignes à null donc on prend les oui et les null

    mais effectivement il semble que les "non" soient aussi souhaités, en ce cas on enleve le filtre de la requete principale et on ne conserve que le where exists
    le principe reste le meme

Discussions similaires

  1. Aide pour une requête et left join
    Par Lolo19 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/08/2005, 08h09
  2. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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