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 sql complexe


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Requête sql complexe
    Salut à tous, voilà j'ai une requête à faire qui en français serait :
    Je dois sélectionner tout les referingDomaine de la table sitedonnees qui ne sont pas dans la table concudonnees et qui apparaissent au moins 2 fois dans la table concudonnes.
    J'ai pour requête la suivante qui me paraît juste, or j'ai fait un test et elle me retourne un array vide alors qu'elle devrait au moins me renvoyer une donnée ..
    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req=$pdo->prepare("SELECT ReferingDomaine
                        FROM sitedonnees 
                        WHERE sitedonnees.ReferingDomaine NOT IN 
                            (SELECT ReferingDomaine
                                  FROM concudonnees
                                 GROUP BY ReferingDomaine
                                 HAVING COUNT( ReferingDomaine ) > 1)
                          GROUP BY ReferingDomaine
                        HAVING COUNT( ReferingDomaine ) = 0 ")

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Question bête : tu exécutes bien la requête ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Oui car si je met "=1" elle me return 14 resultats .. mais je vois pas ce que fait cette requête si elle fais pas ce que je veux :Oo:

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Je crois surtout que l'expression de besoin implique un résultat vide, car c'est impossible

    "Je dois sélectionner tout les referingDomaine de la table sitedonnees qui ne sont pas dans la table concudonnees et qui apparaissent au moins 2 fois dans la table concudonnes"Oubliez la requête SQL, allez voir le demandeur pour qu'il explique ce dont il a vraiment besoin

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Je viens d'aller voir il veux vraiment ça ...

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut


    Non mais comment une valeur peut à la fois être "absente de la table concudonnées" et "présente deux fois dans la table concudonnées"
    C'est tout simplement impossible
    Cette expression de besoin n'a donc aucun sens

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Ma table "sitedonnees" à un certain nombre de lignes. Je dois sélectionner dans cette table, toutes les lignes qui sont présente dans concudonnes ( 2 fois au minimum) mais qui ne le sont pas dans sitedonnees.
    Je m’étais peut-être mal exprimé ^^

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par fazexx Voir le message
    Ma table "sitedonnees" à un certain nombre de lignes. Je dois sélectionner dans cette table, toutes les lignes qui sont présente dans concudonnes ( 2 fois au minimum) mais qui ne le sont pas dans sitedonnees.
    Je m’étais peut-être mal exprimé ^^
    Ce n'est pas ce que vous aviez mentionné dans votre 1er post

    Et cette nouvelle expression de besoin ne va pas non plus, cette fois ci la question est : "comment une ligne présente dans sitedonnées peut etre absente dans sitedonnées"

    relisez vous

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Citation Envoyé par fazexx Voir le message
    Ma table "sitedonnees" à un certain nombre de lignes. Je dois sélectionner dans cette table, toutes les lignes qui sont présente dans concudonnes ( 2 fois au minimum) mais qui ne le sont pas dans sitedonnees.
    Je m’étais peut-être mal exprimé ^^
    Si je reformule:
    "Je dois sélectionner dans la table "sitesdonnees" toutes les lignes présentes au moins deux fois dans concudonnes mais qui ne sont pas dans sitesdonnees."

    Donc tu veux les lignes de "sitedonnees" qui ne sont pas dans "sitedonnees" ?

    Tatayo.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Mais je vois que c'est complexe, ça fait 1 semaine que je galère dessus. Justement je me demande comment est-ce possible.
    en français ça donnerait :
    " Je dois afficher les domaines où je ne suis pas et au moins 2 de mes concurrents sont".

    avec sitedonnees : la liste des domaines de mon site
    concudonnes : la liste des domaines de l'ensemble de mes concurrents

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Ah ben voilà, là c'est tout à fait possible

    Faites donc un "select count distinct identifiant_concurrent" avec un filtre having count distinct identifiant_concurrent> 1 dans votre table concudonnées + un test de non existence sur votre table sitedonnées et l'affaire est réglée

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    En premier lieu tu dois trouver comment traduire en SQL "Avoir la liste des domaines où je ne suis pas".
    Si ta table sitedonnees te permet de connaitre la liste des domaines de ton site, comment avoir la liste des domaines "tout court" ?

    Tatayo.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut


    Mais je voulais savoir si ma requête etait vraiment fausse celle que j'avais fait ?

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Oui, car si j'extrais la sous-requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ReferingDomaine
                        FROM sitedonnees 
                          GROUP BY ReferingDomaine
                        HAVING COUNT( ReferingDomaine ) = 0

    Je ne vois pas trop comment cette requête peut renvoyer quoi que ce soit...
    Il faut plutôt partir de la table concudonnees, lister les domaines qui apparaissent au moins 2 fois, et exclure de cette liste les domaines qui sont dans sitedonnees.

    Tatayo.

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Je ne vois pas trop comment cette requête peut renvoyer quoi que ce soit...
    Il faut plutôt partir de la table concudonnees, lister les domaines qui apparaissent au moins 2 fois, et exclure de cette liste les domaines qui sont dans sitedonnees.

    Tatayo.
    Oui c'est ce que j'ai proposé dans mon post n°11, après avoir obtenu une expression de besoin réaliste
    Ce qui devrait donner quelque chose comme (en adaptant bien sur le nom de la colonne qui identifie le concurrent) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select * from (
        SELECT ReferingDomaine
             , count (distinct id_concurrent)
        FROM concudonnees 
        GROUP BY ReferingDomaine
        HAVING count (distinct id_concurrent) > 1)
        as main
    Where not exists
         (select 1
          FROM sitedonnees as subq
          where subq.ReferingDomaine = main.ReferingDomaine)
    Vous pouvez utiliser une CTE si votre SGBD l'autorise

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    J'ai essayer plusieurs solutions, mais ça ne marche pas tout à fait ..

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Si ça peut aider quelqu'un j'ai trouver la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $req=$pdo->prepare("SELECT *
                        FROM concudonnees
                        AS main
                       WHERE NOT EXISTS( 
                              SELECT 1
                              FROM sitedonnees AS subq
                               WHERE subq.ReferingDomaine = main.ReferingDomaine)
                       GROUP  BY ReferingDomaine
                        HAVING COUNT(ReferingDomaine)>1
                      ORDER BY ReferingDomaine
    ");
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  2. problème de requète SQL pour formulaire
    Par en_stage dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 21/06/2005, 12h21
  3. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  4. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  5. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58

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