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 :

Récupération de données


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut Récupération de données
    Bonjour alors j'aimerais savoir si quelqu'un a une solution par rapport a mon problème.

    J'ai 3 tables une table 'candidats' un table 'metiers' et une table 'submetiers'...
    dans ma table 'candidats' j'ai un id (ex: 266) et dans ma table 'metiers' j'ai un colonne 'candidats_id' qui me permet de les liés entre eux et dans ma table 'metiersub' une colonne 'metiers_id' qui me permet de lié les sous-metiers aux métiers .

    Un peux comme un système d' arborescence .

    et voici mon problème ... Je n'arrive pas a recupérer LES metiers d'un candidats ainsi que LES sous-metier lié à ces métiers.

    Dans ma requète php je ne recupère seulement le dernier dans la liste (ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    candidats 266 -> support -> informatique
                   marketing -> marketing management & assistant marketing 
     
    Resultat = candidats 266 -> marketing -> assistant marketing
    Le mieu c'est que je recupère tout si quelqu'un a une idée je prend

    Merci a tous

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 219
    Par défaut
    Bonjour,

    Ne serait-ce pas quelque chose comme ceci ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT *
    FROM candidat, metier, submetier
    WHERE candidat.IdCandidat = IdARecup
    AND candidat.IdCandidat = metier.IdCandidat
    AND metier.IdSubmetier = submetier.IdSubmetier

    Cordialement.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    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 636
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Je ne vois aucune difficulté particulière, 3 jointures inner ou outer selon le résultat souhaité et hop

    Voici un exemple qui affiche tous les candidats, qu'ils aient ou non un métier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select CAN.NOM, 
           CAN.PRENOM,
           MET.LIBELLE, 
           SUB.LIBELLE
    From Candidats as CAN
    left outer join Metiers as MET
      on MET.candidats_id = CAN.candidats_id 
    left outer join metiersub as SUB
      on SUB.metiers_id = MET.metiers_id
    Tu remplaces left outer par inner si seuls les candidats ayant un métier au moins sont requis

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Enfaite la récupération au niveau SQL est ok mais c'est surtout dans mon code php en faite je ne récupère pas tout pourtant je suis bien en fetchall :/

  5. #5
    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
    Par défaut
    Si le problème est au niveau PHP, il faut nous montrer ton code PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Attention ça pique les yeux

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public function find($req=null){
    		$sql= 'SELECT ';
     
    		if(isset($req['fields'])){
    			if(is_array($req['fields'])){
    				$sql .=implode(',', $req['fields']);
    			}else{
    				$sql .=$req['fields'];
    			}
    		}else{
    			$sql .='*';
    		}
     
    		$sql .=' FROM ';
    		if(isset($req['tables'])){
    			$sql.= $req['tables'];
    		}else{
    			$sql.= $this->table.' as '.get_class($this);
    		}
     
    		//Construction de la condition
    		if(isset($req['conditions'])){
    			$sql .= ' WHERE ';
    			if(!is_array($req['conditions'])){
    				$sql .= $req['conditions'];
    			}else{
    			$cond = array();
    			$req['conditions'];
    				foreach($req['conditions'] as $k=>$v){
    				if(is_numeric($v)){
    				$v = '"'.$v.'"';
    				}
    				$cond[]= "$k=$v";
    				}
    				$sql .= implode(' AND ',$cond);
    			}
    		}
     
    		if(isset($req['limit'])){
    			$sql .= ' LIMIT '.$req['limit'];
    		}
     
    		if(isset($req['order'])){
    			$sql .= ' ORDER BY '.$req['order'];
     
    		}
     
     
    		$pre= $this->db->prepare($sql);
    		$pre->execute();
    		return $pre->fetchAll(PDO::FETCH_OBJ);
    	}

  7. #7
    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
    Par défaut
    Que donne la requête construite ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM candidats,metiers,metiersubs,qpros WHERE candidats.id="266" AND metiers.candidats_id="266" AND metiers.id=metiersubs.metiers_id AND qpros.candidats_id=candidats.id

    Je récupère autre chose aussi mais c'est pas important

  9. #9
    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
    Par défaut
    Le prepare ne sert à rien puisque tu n'utilises pas de paramètres.
    On passe sur le fait que tu fais des jointures sans JOIN, c'est incorrect mais ça doit marche quand même.
    Egalement c'est étrange de mettre des " dans le cas numérique.

    Bref, quand tu executes cette requêtes dans ton SGDB tu as plusieurs lignes de résultat ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    oui j'ai 2 métiers et 3 sous métiers

  11. #11
    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
    Par défaut
    Comment tu exploites le retour de cette fonction ensuite ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Alors :
    Je récupère ma requête en obj également puis je la passe a une fonction Set qui me permet d'afficher a tout mes inputs les resultats que j'ai .

    Seul soucis c'est que dans mon formulaire je peux selectionner plusieurs checkbox donc les metiers et sous metiers comme ceci ->Nom : Capture d’écran 2015-02-09 à 21.23.36.png
Affichages : 186
Taille : 93,3 Ko

    Du coup si je récupère une seule info alors que j'en ai 3 par exemples

  13. #13
    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
    Par défaut
    le cooooooode ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function admin_editc($id=null){
    		$this->loadModel('candidat');
    		$this->loadModel('metier');
    		$this->loadModel('metiersub');
    		$this->loadModel('langue');
    		$this->loadModel('qpro');
    		$d['id']='';
    		if($this->request->data){
    			$this->request->data;
    			$this->request->data->inscription = date('Y-m-d');
    			$this->candidat->save($this->request->data);
    			$id = $this->candidat->id;
    			$this->metier->save($this->request->data,$id);
    			$this->langue->save($this->request->data,$id);
    			$this->qpro->save($this->request->data,$id);
    			$id = $this->metier->id;
    			$this->metiersub->save($this->request->data,$id);
    			$this->Session->setFlash('Le Candidat à bien été modifié','info');
    		}
    		if($id){
    		$this->request->data = $this->candidat->findEditc(array('tables'=>'candidats,metiers,metiersubs,qpros','conditions' => array('candidats.id' => $id , 'metiers.candidats_id' => $id ,'metiers.id' => 'metiersubs.metiers_id', 'qpros.candidats_id' =>'candidats.id' )));
    		$d['id']=$id;
    		}
    		$this->set($d);
    	}

  15. #15
    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
    Par défaut
    C'est ça la fonction "set" dont tu nous parlais avant ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  16. #16
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    oui c'est celle qui me permet de tout afficher

  17. #17
    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
    Par défaut
    Donc la fonction "set" c'est "admin_editc" ... bon et où se place la fonction "find" et son résultat par rapport à "admin_editc" dans le code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    En faite je suis en model MVC donc la fonction envoyer précédemment fais partie de la classe AdminController qui est une extension de Controller ( dont set() est inclus dedans.

    Pour ce qui est de la fonction Find() elle ce trouve dans ma classe Model, classe qui envoie les requêtes SQL du coup je la charge avec la fonction loadModel qui prend en paramètre la table a utilisé pour les requêtes .

    Pour récupérer les donnée je me sert de $this->request->data qui va stocker toute les informations que me retourne mon model

  19. #19
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Hola ,
    j'ai trouver mon problème ..
    j'ai fais une requête findFirst() qui récupérait seulement le premier élément de ma liste ... tous s'explique maintenant ! désoler de vous avoir fais perdre votre temps et encore merci pour vos réponse !!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2004, 10h09
  2. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  3. [ DB2] => [ORACLE] Récupération de données
    Par LeDid dans le forum DB2
    Réponses: 3
    Dernier message: 25/06/2003, 17h10
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 15h36

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