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 PHP Discussion :

Organiser le resultat d'une requête SQL dans différents tableaux PHP (arborescence)


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut Organiser le resultat d'une requête SQL dans différents tableaux PHP (arborescence)
    Bonjour,
    Je suis désolé mais je n'ai pas réussi à trouver un nom explicite. Je vous explique mon problème très particulier.
    Actuellement je travaille sur un site et je pars d'un produit qui appartient lui même à plusieurs famille. Par exemple, telle cartouche peut aller sur telle ou telle imprimante. Bref, j'ai donc à gérer des promos. Je récupère donc l'ID de 6 produits. Ensuite, pour chaque produit je récupère dans la base de données les ID de leur famille sous la forme |xxx|xxxx||xxx bref j'arrive donc a créer un tableau qui va lister chacun des IDs famille.
    Ensuite et seulement ensuite, à partir de chaque ID famille, je dois remonter toute une arborescence dans une table SQL (je pars par exemple de l'ID 6660 dont l'ID parent sera 3000 et ce jusqu'à temps d'arriver à l'ID parent 0). Tout ça pour pouvoir afficher, cartouche encre brother DCP 130C (par exemple).
    Bref actuellement, j'arrive à remonter cette arborescence pour un ID famille mais pas pour plusieurs, le tableau s'ecrase à chaque fois.

    Voici le code vous comprendrez mieux:

    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
     
    	//Permet de parcourir l'arborescence pour un produit
    	class arborescence{
     
    		public $tab = array();
     
    		function listeSousCateg($eId) {		
    					$vSqlSousCateg = "SELECT ID, IDParent, libelle
    										FROM fam_prod
    										WHERE ID = '".$eId."'";
     
    					$vRstSousCateg = mysql_query($vSqlSousCateg) or die("Erreur sql :".mysql_error());
     
    					while($vSousCateg = mysql_fetch_array($vRstSousCateg)) 
    					{				
    						$this->tab[$vSousCateg["ID"]] = array("id" => $vSousCateg["IDParent"], "libelle" => $vSousCateg["libelle"]);
    						if($vSousCateg["IDParent"] != 0 )
    						{
    							$this->listeSousCateg($vSousCateg["IDParent"]);
    						}
    					}	
    		}
    	}
     
    		//Récupération famille ID1
    		if($I1 != 0)
    		{
    			$famille_1 = Retourne_Famille($I1);
    			$resultat_1 = Decoupe_Chaine($famille_1);
    			echo "<pre>";			
    			print_r($resultat_1);
    			echo "</pre>";			
    			//A partir de l'ID de famille, on va reconstituer les modèles compatibles
    			$arbo = new arborescence;	
     
    			//ID1
     
    			for ($cpt=0;$cpt<sizeof($resultat_1);$cpt++)
    			{
    				$arbo->tab = array();
    				$arbo->listeSousCateg($resultat_1[$cpt]);
    			}		
    		}else{
     
    		}
    Bref avec ce code, je remonte l'arborescence d'un modèle alors qu'au final, je devrais le faire pour beaucoup plus. En gros, le tableau $arbo->tab s'ecrase à chaque fois, je desespère je n'ai plus d'inspiration.
    J'espère que vous comprendrez.
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Bonjour,
    Cette histoire d'arborescence est-elle incontournable ?
    Est-ce uniquement pour recuperer 'cartouche' puis 'brother' ... ?

    Z.

  3. #3
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    ok, je viens de comprendre.
    je pense que tu devrais reprendre ta variable table.
    Pouquroi ne pas la faire a l'image de ce qu'est un arbre ?
    ici, tu as le cas d'un produit qui a 2 parents, et dont le 1er parents a encore 2 aprents, alors que le second n'a qu'un seul parent.

    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
    tab[racine] => 
      [ID] => $vSousCateg[ID]
      [libelle] => $vSousCateg[libelle]
      [parents} =>
        [0] => 
          [ID] => $vSousCateg[ID]
          [libelle] => $vSousCateg[libelle]
          [parents} =>
            [0] => 
              [ID] => $vSousCateg[ID]
              [libelle] => $vSousCateg[libelle]
            [1] => 
              [ID] => $vSousCateg[ID]
              [libelle] => $vSousCateg[libelle]
        [1] => 
          [ID] => $vSousCateg[ID]
          [libelle] => $vSousCateg[libelle]
          [parents} =>
            [0] => 
              [ID] => $vSousCateg[ID]
              [libelle] => $vSousCateg[libelle]

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut
    Wah euh merci de ta réponse mais j'ai pas tout compris ( je suis grave à la ramasse ces temps-ci)...bref bah oui moi ce que j'aurais aimé c'est soit à chaque tour de boucle recréer un nouveau tableau, soit créer un big tableau comme je pense tu l'entends. Mais comment faire :s

  5. #5
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    il faut faire comme tu fais, sauf qu'il te faudra utiliser les reférences de variables au lieux des variables elles meme.
    Ici en l'ocurance, tu passeras la reférence de l'emplacelment dans le tableau ou doivent être placer les parents.

    Mais precise moi tout ca pour savoir si j'ai bien compris :
    Combien de produits veux-tu recuperer a la fois ?
    Combien un enfant peut il avoir de parents ?
    Pourquoi voudrais-tu tout recuperer dans un seul tableau ?
    Pourquoi recréer a chaque tour de boucle un nouveau tableau ?

    Z.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Moi je propose un truc de ce genre:
    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
     
    		function listeSousCateg($ID,&$libelle,&$id_parent) {		
    					$vSqlSousCateg = "SELECT IDParent, libelle
    										FROM fam_prod
    										WHERE ID = '".$eId."'";
     
    					$vRstSousCateg = mysql_query($vSqlSousCateg) or die("Erreur sql :".mysql_error());
    					$vSousCateg = mysql_fetch_array($vRstSousCateg); 	
    					$id_parent=$vSousCateg['IDParent'];
    					$libelle=$vSousCateg['libelle'];
    		}
     
    		//Récupération famille ID1
    		if($I1 != 0)
    		{
    			$famille_1 = Retourne_Famille($I1);
    			$resultat_1 = Decoupe_Chaine($famille_1);
    			echo "<pre>";			
    			print_r($resultat_1);
    			echo "</pre>";			
    			//A partir de l'ID de famille, on va reconstituer les modèles compatibles
    			//on a un tableau avec comme clé chaque famille de départ
    			$liste_parent =array_flip($resultat_1);
    			//ID1
    			foreach( $resultat_1 as $id_famille) {
    				//on initialise le tableau qui recoit les sous familles
    				$liste_parent[$id_famille]=new array();
    				$libelle='';
    				$id_parent=-1;
    				listeSousCateg($id_famille,$libelle,$id_parent);
    				$liste_parent[$id_famille][$id_famille]=$libelle;
    				while ($id_parent !=0)
    				{
    					$id=$id_parent;
    					//on recupere id parent et le libelle
    					listeSousCateg($id,$libelle,$id_parent);
    					$liste_parent[$id_famille][$id]=$libelle;
    				}
    			}
    			print_r($liste_parent);
    		}
    ainsi dans liste parent pour chaque id_famille de départ en clé tu as un tableau comprenant tout les libelles de la famille avec en clé leur id

  7. #7
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut
    J'ai oublié de dire que c'était résolu un ami m'a dépanné de la fonction précédemment donné!!
    En tout cas merci

Discussions similaires

  1. Réponses: 15
    Dernier message: 11/05/2007, 15h28
  2. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  3. [MySQL] Passer une requête SQL dans un tableau
    Par phpaide dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/05/2006, 11h09
  4. Réponses: 1
    Dernier message: 25/10/2005, 12h18
  5. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07

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