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 :

code php mysql reccurent


Sujet :

PHP & Base de données

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Par défaut code php mysql reccurent
    Bonjour,
    j'explique.

    soit le schéma suivant .


    X
    / \
    Z Y
    / \ \
    L H J

    Bon je veux faire un programme qui permet de dégager les amis niveau 1 de X qui sont (Z et Y), puis dégager les amis niveau 2 de X qui sont (L, H , J) qui sont les amis niveau 1 de Z et Y. jusqu'à niveau 10
    sachant que les données sont enregistres dans deux tables

    exemple

    table_liste
    Nom | id
    X | 10
    Z| 14
    Y | 12
    L | 8
    H| 2
    j| 4

    table_amis :
    Id_nom | id_amis
    10 |14
    10 |12
    14 |8
    14 |2
    12 |4



    Si je veux afficher les amis de x à partir de niveau 1 jusqu'à niveau 10 , je dois utiliser une fonction récurrente?

    Comment faire ça avec mysql ?
    Merci.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Il faut utiliser la récursivité. MySQL est mal armée face à cela.
    Pour commencer je te conseille une approche naïve.

    Je te donne un exemple que tu pourras facilement adapter à tes besoins...

    Arborescence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
             A
            / \
           B   C
          / \   \
         D  E    F
           /|\    \
          G H I    J
         /|   |   /|\
        K L   M  N O P
                /
               Q
    Structure BdD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    elements
    ------------
    element_id
    element_parent
    ------------
    Données :

    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
    A, NULL
    B, A
    C, A
    D, B
    E, B
    F, C
    G, E
    H, E
    I, E
    J, F
    K, G
    L, G
    M, I
    N, J
    O, J
    P, J
    Q, N
    Pour récupérer les éléments enfants de profondeur $depth d'un élément donné :

    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
    function get_children_by_depth($parents, $depth = 1)
    {
        $sql = sprintf('SELECT ALL element_id FROM elements WHERE element_parent IN("%s")',
                       implode('", "', (array)$parents)) ;
        $rs = mysql_query($sql) ;
        $children = array( ) ;
        while ( $tuple = mysql_fetch_assoc($rs) ) {
            $children[ ] = $tuple['element_id'] ;
        }
        if ( $depth > 1 && ! empty($children) ) {
            return get_children_by_depth($children, $depth - 1) ;
        } else {
            return $children ;
        }
    }
    Recherche des enfants de niveau 3 de B :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mysql_connect('127.0.0.1', 'root', '') ;
    mysql_select_db('test') ;
     
    $root = 'B' ;
    $depth = 3 ;
    $children = get_children_by_depth($root, $depth) ;
    echo $root, '@', $depth, ': ', print_r($children, TRUE) ;
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    B@3: Array
    (
        [0] => K
        [1] => L
        [2] => M
    )
    Bon développement

Discussions similaires

  1. [MySQL] code php/mysql
    Par Smurfette2Adnen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/01/2013, 11h25
  2. [MySQL] Aide pour un code PHP/MySQL
    Par sara21 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/04/2010, 08h36
  3. [MySQL] Réécrire code PHP/MySQL en MySQL pur
    Par grafik.muzik dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/07/2009, 07h30
  4. [Joomla!] Ajouter code php/mysql dans page statique
    Par eric.rouyer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 02/08/2007, 21h29

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