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 :

utiliser in() dans une jointure?


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut utiliser in() dans une jointure?
    Bonjour

    Je travaille sur une petite application de permutation de service dans une entreprise.je simplifie au maximum pour ne parler que du probleme

    Chaque employé peut enregistrer une demande de changement de service. Dans son choix'de service il peut faire 1 voeux.

    La tabe ressemble a ca

    Nom / prov(provenance) / dest(destination)

    Prov et dest sont des int relier a une autre table contenant tous les services.

    Jutilise une simple jointure pour rechercher les membres qui pourrait intervertir de service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM permut p1
    Inner join permut p2
    On p1.dest = p2.prov
    And p1.prov = p2.dest
    Le souci cest que jaimerai donner la possibilite au employé de mettre plusieurs souhait de destination. Et je suis contraint de navoir qu'une seule ligne par employé.

    Donc jai pensé enregistrer dans le champ dest les souhaits comme ceci : 1,4,21
    Chaque chiffre correspondant a un service.

    J'ai essayé de modifier la requete omme ceci mais sans resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM permut p1
    Inner join permut p2
    On p1.prov in(p2.dest)
    And p2.prov in(p1.dest)
    Mais la requete ne retourne aucun resultat et je n'ai pas d'erreur mysql.

    Pouvez vous maider? Est ce possible d'utiliser in dans une jointure? Sinon j'avais penser utiliser like.

    Merci d'avance.
    cordialement
    Morgan

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mettre plusieurs valeurs dans une seule valeur n'est pas conforme dans une structure relationnelle.
    Concrètement tu as écris une valeur "1,4,21" et non pas 3 valeurs donc forcement, ta requête ne donne rien.

    A quoi tient ta contrainte de "une seule ligne" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    En fait j'ai simplifié le problème mais en plus du service, dans cette table est aussi enregistrer la ville, le departement et la region de provenance et le souhait de destination.

    De plus, l'employé ne peut poster qu'une seule annonce en cours d'où la limitation a une seul ligne.

    Dans ce cas la je ne vois pas comment gerer les multiples demande de service.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut une table supplémentaire pour inscrire chaque service liés à une demande.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    En rajoutant une table qui contient les choix de service et qui est liée par lid de la demande, je viens d'essayé mais j'ai un soucis concernant l'ordre des jointures voici la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * 
    FROM permut p1
    INNER JOIN directiond p1d ON p1.id = p1d.id
    INNER JOIN permut p2
    ON p1.vdest = p2.vprov
    AND p1.vprov = p2.vdest
    AND p1d.ddest = p2.dprov
    AND p2d.ddest = p1.dprov
    INNER JOIN directiond p2d ON p2.id = p2d.id
    Mysql me dit que p2d n'existe pas, chose qui est normal puisque la table arrive apres.
    Mais comment faire d'abord joindre p2d a p2 avant de joindre p2 a p1?

    A moins que tu pensais a une autre requete?

    Merci de te pencher sur mon probleme.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Que contiennent permut et direction ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Permut : id(identifiant unique autoincremente)-nom-vprov(ville de provenance)-dprov(service de provenance)-vdest(ville voulu)
    Directiond: id(identifiant relié a la table permut correspondant a lid de la demande)-ddest(service voulu)

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut seulement écrire dans l'ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    FROM permut p1
    INNER JOIN directiond p1d ON p1.id = p1d.id
    INNER JOIN permut p2 ON p1.vdest = p2.vprov AND p1.vprov = p2.vdest
    INNER JOIN directiond p2d ON p2.id = p2d.id
    WHERE p1d.ddest = p2.dprov AND p2d.ddest = p1.dprov
    Il manque un id propre à la table directiond
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Tout d'abord merci pour ton aide.
    J'ai rajouté pour eviter les doublons dans la jointure p1.id < p2.id

    Si tu a encore un peu de temps.

    Concernant un id pour la table directiond, est ce que cest vraiment necessaire ou obligatoire? Car lors de la suppression d'une demande sur la table permut, je fais également une suppression sur la table directiond.

    Concernant l'affichage des resultats en php, je souhaiterai afficher pour chaque ligne de resultat les demandes completes de chaque employé avec tous les services demandé.

    Mise a part faire un requete supplémentaire dans la boucle while je ne vois pas trop comment faire.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est toujours bien d'avoir un id dans un table, par exemple pour designer une ligne précise.

    Concernant ton affichage, range le résultat de la requête dans un tableau PHP classé par demandeur.
    Ton pourras ainsi facilement lister toutes les demandes ou spécifiquement les demandes d'une personne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Oui mais le petit soucis c'est pour recuperer les informations.

    Un employé demande 3 services differents, la requete precedent fait la relation entre 2employes qui peuvent permuté de service et affiche les resultats en affichant que le service correspondant mais il n'affiche pas les autres services demandés.

    Par exemp,e .

    Nom1 est au service s6 et souhaite aller au service s1, s2ou s3.
    Nom2 est au service s2 et souhaite eller au service s5,s6

    La requete affiche
    Nom1 - s6 > s2 - nom2 - s2>s6

    Et jaimerais afficher
    Nom1 - s6 > s2,s1,s3- nom2 - s2>s6,s5

Discussions similaires

  1. [MySQL] Utiliser substring d'un champ indexé dans une jointure.
    Par Anonymus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2014, 12h59
  2. Utiliser MAX dans une jointure
    Par gotcha5832 dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/07/2014, 01h00
  3. Utiliser des ALIAS de colonnes dans une jointure
    Par mbzhackers dans le forum SQL
    Réponses: 4
    Dernier message: 31/03/2008, 10h27
  4. Utiliser ssh dans une application java
    Par Samanta dans le forum Sécurité
    Réponses: 12
    Dernier message: 28/02/2007, 16h30
  5. utiliser mysql++ dans une classe
    Par Yevetrovitch dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 11/04/2005, 10h53

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