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 :

Afficher elements non contenus dans la requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut Afficher elements non contenus dans la requête
    Bonsoir tt le monde,

    j' ai un problème avec une requête, c'est que ça n'affiche pas ce que je veux.
    j'explique: j'ai 2 tables site(CodeSite, nomsit, #CodeCli) et concerner(codecontrat, CodeSite).
    je veux en fait afficher les sites d'un client qui ne sont pas liés à un contrat lorsqu'on selectionne le client.
    Voici ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT site.CodeSite, site.nomsit 
    FROM site, concerner 
    WHERE concerner.CodeSite<>site.CodeSite 
      AND site.CodeCli='".$_POST['txtnomcli']."'
    S'il vous palit j'ai vraiment besoin de coup de main pour avancer.
    Merci d'avance

  2. #2
    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
    Quelques remarques pour commencer...

    1) La syntaxe normalisée pour les jointures est depuis 1992 celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT colonnes
    FROM table1
    JOIN table2 ON condition de jointure
    2) site.CodeCli est une clé étrangère faisant référence à la table des clients je suppose ?
    Donc ce devrait être une colonne de type entier non nul et non signé pour faire une clé primaire efficace dans la table des clients.
    Ce faisant, je trouve étrange que tu compares un CodeCli avec une variable 'txtnomcli' !
    Si CodeCli est bien de type entier, inutile de mettre sa valeur cherchée entre apostrophes.

    Maintenant la requête qui devrait fonctionner, avec une jointure externe gauche normalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT s.CodeSite, s.NomSite
    FROM site
    LEFT OUTER JOIN concerner c ON s.CodeSite = c.CodeSite
    WHERE s.CodeCli = ".$_POST['txtnomcli']."
      AND c.codecontrat IS NULL
    Les guillemets signifient bien sûr l'interruption de la chaîne de caractères contenant la requête pour y introduire la variable et non pas que la valeur de la variable sera entourée de guillemets.
    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 !

  3. #3
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ce faisant, je trouve étrange que tu compares un CodeCli avec une variable 'txtnomcli' !
    Si CodeCli est bien de type entier, inutile de mettre sa valeur cherchée entre apostrophes.

    Maintenant la requête qui devrait fonctionner, avec une jointure externe gauche normalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT s.CodeSite, s.NomSite
    FROM site
    LEFT OUTER JOIN concerner c ON s.CodeSite = c.CodeSite
    WHERE s.CodeCli = ".$_POST['txtnomcli']."
      AND c.codecontrat IS NULL
    Les guillemets signifient bien sûr l'interruption de la chaîne de caractères contenant la requête pour y introduire la variable et non pas que la valeur de la variable sera entourée de guillemets.
    J'ai essayé votre code, mais il faut que je mette ' ".$_POST['txtnomcli']." ' sinon ça ne marche pas.
    J'ai aussi reussi à faire celle-ci qui me donne ce que je veux,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT site.CodeSite, site.nomsit FROM site 
    WHERE site.CodeCli='".$_POST['txtnomcli']."' 
    AND site.CodeSite NOT IN (SELECT CodeSite FROM concerner )
    appreciez et dites moi si c'est en vigueur.
    Merci pour votre aide!

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

Discussions similaires

  1. [AC-2010] Afficher les enregistrements d'une table non présents dans une requête
    Par Mauricianstyle dans le forum Access
    Réponses: 4
    Dernier message: 24/04/2015, 14h14
  2. Afficher les noms contenus dans la ldap
    Par NicoO_O dans le forum Langage
    Réponses: 2
    Dernier message: 23/04/2007, 14h59
  3. Valeur non trouvé dans une requète SQL
    Par Jeankiki dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/12/2006, 16h36
  4. variable non reconnue dans une requête sql
    Par sanatou dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2006, 17h43
  5. champs non accessibles dans une requête sélection
    Par Claire31 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 03/08/2006, 13h22

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