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

Requêtes MySQL Discussion :

requetes imbriquées : plusieurs colonnes


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut requetes imbriquées : plusieurs colonnes
    Bonjour,
    voici mon problème: j'ai créer une table Categories avec id, nom, specialite, nationalite.
    Je souhaite maintenant créer une requête sélectionnant tous les champs de Categories qui sont égaux à n'importe quel champ (nom, specialite et nationalite) d'une ligne sélectionnée.
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT* 
    FROM Categories 
    WHERE nom OR specialite OR nationalite = (
      SELECT* 
      FROM Categories 
      WHERE nom LIKE '"%.recherche.%"');
    Ca ne marche pas, apparemment parce que la sous-requete a plusieurs colonne... qqn verrait-il une solution?
    Merci!

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour

    est-ce ceci que vous voulez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT * 
    FROM Categories 
    WHERE  (
      SELECT nom
      FROM Categories 
      WHERE nom LIKE '"%.recherche.%"'
    )  IN (nom , specialite , nationalite );

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci pour votre réponse!
    c'est presque ça, mais je voudrais SELECT* et pas SELECT nom pour la sous-requete... qqch comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT * 
    FROM Categories 
    WHERE  (
      SELECT *
      FROM Categories 
      WHERE nom 
      LIKE ('%".$recherche."%')
      ) IN (nom, specialite, nationalite)";
    est-ce possible? Pour l'instant j'ai ce message d'erreur: "Operand should contain 10 column(s)"

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Je ne comprend pas ce que vous cherchez à faire ! pourriez vous expliquer plus en détail le problème, et fournir un jeu d'essai pour mieux comprendre.

    Si vous cherchez les lignes qui contiennent le mot clef dans n'importe quelle des trois colonnes, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * 
    FROM Categories 
    WHERE nom like '%MotClef%'
    OR specialite LIKE '%MotClef%'
    OR nationalite LIKE '%MotClef%'

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Après y avoir bossé toute la nuit, j'ai réussi à obtenir ce que je voulais: il me fallait un UNION! Voila mon code:

    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
    SELECT nom, prenom
    FROM Categories
    WHERE nationalite IN
    (SELECT nationalite 
    FROM Categories
    WHERE nom LIKE ('%".$recherche."%'))
     
    UNION
     
    SELECT nom, prenom
    FROM Categories
    WHERE specialite IN
    (SELECT specialite 
    FROM Categories
    WHERE nom LIKE ('%".$recherche."%'));

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    Utiliser un union au lieu de OR est en soit une pas si mauvaise idée que cela, mais les sous-requêtes n'ont pas lieu d'être.

Discussions similaires

  1. [9.3] Imbriquer plusieurs colonnes en une nouvelle
    Par Hik4rian dans le forum Requêtes
    Réponses: 11
    Dernier message: 25/02/2015, 17h18
  2. Requete update plusieurs colonnes sql paradox
    Par vitch8 dans le forum Paradox
    Réponses: 1
    Dernier message: 06/03/2009, 17h35
  3. Réponses: 11
    Dernier message: 03/03/2009, 01h03
  4. Select imbriqué avec plusieurs colonne
    Par rad_hass dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2008, 10h48
  5. [MySQL] affichage requete d'une colone sur plusieurs colonnes
    Par yohann26 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/10/2007, 16h11

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