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

PHP & Base de données Discussion :

Sélection des lignes dont les associations sont dans une certaines liste [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Sélection des lignes dont les associations sont dans une certaines liste
    Bonjour !

    Dans ma base de données, j'ai une table "activites" de clef primaire "idActivite". J'ai de plus une table "necessite" avec les colonnes "idActivite" et "idObjet". Ainsi, chaque activité est liée par cette association à des objets. L'utilisateur sélectionne une liste d'objets et je souhaiterais n'afficher que les activités dont tous les objets "nécessités" sont dans cette liste. J'ai essayé de procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "SELECT idActivite FROM activites WHERE (SELECT idObjet FROM necessite WHERE necessite.idActivite = necessite.idObjet AND idObjet NOT IN($listeObjetNecessaires)) IS NULL";
    Mais j'ai l'erreur "#1242 - Subquery returns more than 1 row" car il y a plusieurs objets nécessités par certaines activités et MySQL refuse d'y appliquer IS NULL.

    Auriez-vous une idée pour résoudre le problème s'il-vous-plaît ?

    Merci d'avance !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Solution
    J'ai trouvé une solution, bien que quelque peu impropre : j'ajoute un objet d'identifiant idObjet = 0 qui est automatiquement associé à toutes les activités par "necessite". Je peux alors faire la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT idActivite FROM activites
    INNER JOIN necessite ON necessite.idActivite = necessite.idActivite
    WHERE idObjet IN($listeObjets)
    GROUP BY activite.idObjet
    HAVING COUNT(idObjet) = 1
    Littéralement, ceci sélectionne uniquement les activités dont le nombre d'objets non dans $listeObjets est égal à 1, c'est-à-dire que seul l'objet n°0 n'est pas dans la liste pour chaque activité. L'objet n°0 n'est en fait qu'un tour de manège et on récupère toutes les activités dont tous les objets (sauf le 0 qui n'est pas utile) sont dans la liste fournie par l'utilisateur.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/01/2012, 15h29
  2. Réponses: 6
    Dernier message: 10/11/2011, 14h50
  3. modifier des tables dont les noms sont dans une autre
    Par lapin_did dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/09/2010, 09h45
  4. Réponses: 7
    Dernier message: 05/09/2008, 11h07
  5. Réponses: 0
    Dernier message: 06/02/2008, 17h05

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