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 :

concaténer des données dans une boucle recursive [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut concaténer des données dans une boucle recursive
    Bonsoir à tous,

    j'ai parcouru le forum à la recherche de cette info :

    Je rencontre un problème à vouloir ou concaténer en string ou dans un tableau des éléments d'une fonction récursive.

    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
     
    function verslebas($id_sponsor)
    {
    	include ("globales.php");
    	$bd = mysql_connect($host,$login,$pass) or die ("erreur de connexion2");
    	mysql_select_db($bdsite,$bd) or die ("erreur de connexion base2");
    		$res = mysql_query("SELECT * FROM cc_compro c, cc_users u where u.id = c.id and c.cb_sponsor='$id_sponsor'", $bd);
     
    			while ($ligne = mysql_fetch_object($res))
    				{
     
    					$email_f = $ligne->email;
    					echo "$email_f<br>";
    					$tableau[] = $email_f;
     
    					$res2 = mysql_query("SELECT * FROM cc_compro where cb_sponsor='$email_f'", $bd);
    					$num2 = mysql_num_rows($res2);
     
    					if($num2>0)
    						{
    						verslebas($email_f);
    						}
    				}
    }
     
    verslebas($acces);

    Le rendu me donne bien ce qui je souhaite a savoir l'arbre des filleuls selon un "parain", mais comment puis je les concatener correctement pour les insérer tous dans un champ de bdd...

    Je sèche :/

    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    La balise code stp et se sera parfait.

    Pour répondre à ton problème il te suffit de faire en sorte que ta fonction retourne un tableau ou une chaîne, selon ce que tu souhaites.
    Et lors de l'appel récursif, tu dois concaténer.

    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
    function connect(){
    	include ("globales.php");
    	$bd = mysql_connect($host,$login,$pass) or die ("erreur de connexion2");
    	mysql_select_db($bdsite,$bd) or die ("erreur de connexion base2");
    	return $bd;
    }
     
    //- tableau
    function verslebas_tableau($id_sponsor){
    	$bd = connect();
    	$res = mysql_query("SELECT * FROM cc_compro c, cc_users u where u.id = c.id and c.cb_sponsor='$id_sponsor'", $bd);
     
    	$retour = array();
     
    	while ($ligne = mysql_fetch_object($res)){
    		$retour[] = $ligne->email;
    		$temp = verslebas_tableau($ligne->email);
    		if( count($temp) > 0 )
    			array_merge ( $retour, $temp );
    	}
     
    	return $retour;
    }
     
    $emails = verslebas_tableau($acces);
    // emails est un tableau
    echo "<pre>";
    var_dump($emails);
    echo "<pre>";
     
     
    //- chaine
    function verslebas_chaine($id_sponsor){
    	$bd = connect();
    	$res = mysql_query("SELECT * FROM cc_compro c, cc_users u where u.id = c.id and c.cb_sponsor='$id_sponsor'", $bd);
     
    	$retour = "";
     
    	while ($ligne = mysql_fetch_object($res)){
    		$retour .= $ligne->email.";";
    		$retour .= verslebas_chaine($ligne->email);
    	}
     
    	return $retour;
    }
     
    $emails = verslebas_chaine($acces);
    // emails est une chaine
    echo "<pre>";
    	echo strlen($email)>900 ? substr($email, 0, 900)."..." : $email;
    echo "<pre>";
    Je ne l'ai pas testé... Donc il peut y avoir des erreurs, cependant l'idée est là.

    Au passage j'ai fais quelques modifications car il me semble que ton code contient des éléments superflu, ou qui peuvent être ré agencé plus efficacement.

    a plus

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    Attention, une connexion à chaque tour de boucle dans une fonction récursive ca peut être très couteux

    Le script contenant le fonction verslebas doit avoir préalablement fait appel à la connexion sql et à la fonction mysql_select_db.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta rapidité kaymak !

    Çà a l'air bien à première vu ! je viens de tester rapidement le code, pour le moment je n'ai plus de récursivité, vu que ça a l'air bon sur le papier, je me penche d'avance dessus tout de suite !

    Merci encore je regarde ça.

    Merci aussi ThomasR

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci bcp c'est parfait la fonction chaine !

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

Discussions similaires

  1. Récupération des données dans une boucle for
    Par boubounagh dans le forum Interfaces Graphiques en Java
    Réponses: 22
    Dernier message: 24/10/2011, 16h29
  2. Réponses: 4
    Dernier message: 20/04/2010, 11h24
  3. Réponses: 4
    Dernier message: 19/09/2005, 15h59
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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