Bonjour,

Cela fais plusieurs années que je n'ai plus fais 1 ligne de code, et ça fais maintenant 3 jours que je me prends la tête avec quelques chose qui m'avais l'air si simple ...

Je stoque en base de donnée une liste de machines, voici se que j'obtiens quand je fait une requette :

<?php
array(
    0 => array (
            'id' => 1,
            'name' => 'usine 1',
            'description' => 'Description de l\'usine 1',
            'parent_id' => 0
        ),
    1 => Array(
            'id' => 2,
            'name' => 'Conditionnement',
            'description' => 'Conditionnement de l\'usine 1',
            'parent_id' => 1
        ),
    2 => Array (
            'id'=> 3,
            'name' => 'Ligne 1',
            'description' => 'Ligne 1 de l\'usine 1',
            'parent_id' => 2
        ),
     //...etc
)

J'aimerais afficher les machines si dessus sous forme d'arborescence.

Pouvez-vous me donner la voie à suivre afin que je puisse réaliser cette fonction.

Merci par avance.

3 réponses



<?php
$tab = array(
    0 => array (
            'id' => 1,
            'name' => 'usine 1',
            'description' => 'Description de l\'usine 1',
            'parent_id' => 0
        ),
    1 => Array(
            'id' => 2,
            'name' => 'Conditionnement',
            'description' => 'Conditionnement de l\'usine 1',
            'parent_id' => 1
        ),
    2 => Array (
            'id'=> 3,
            'name' => 'Ligne 1',
            'description' => 'Ligne 1 de l\'usine 1',
            'parent_id' => 2
        ),
     //...etc
);

for($i=0; $i<count($tab); $i++){
    echo 'id = ' . $tab[$i]['id'];
    //etc...
    }

C'est assez bizzare je trouve. Car tu veux faire une liaison inter table. Avec aucun champs pour les différencier à part l'id parent.
Sauf que là tu as 3 id parent différent.

de ce que je comprends, chaque ligne du tableau est soit le nom de l'usine, soit de son conditionnement, soit un autre truc.

J'ai deux methode et demi à te proposer. ( très important le "et demi" xD)

La première serai que chaque usine ait sa propre ligne dans la table. Dans cette ligne tu référence tout. Ainsi pas besoin de créer des liaisons à tire larigot avec plusieur ligne.

Seconde methode qui sera intéressante si jamais plusieurs usines on des conditionnements identiques ou autres. Ce serait de créer un total de 3 tables.

La table usine, une table de jointure et une table avec toutes les différentes caractéristique de tes usines.

Table usine :

id   | nom_usine  | description 
0    | Lustucru    | Des bonnes pattes fraichement sèche !
1    | Oreo        | Il faut tourner les deux biscuits pour séparer le tout. 
etc.

table de jointure :

id   | id_usine | id_caracteristique  
0    | 1         | 1 
1    | 0         | 0
etc.

table de caractéristique :

id   | nom_caracteristique  | description 
0    | Conditionnement       | Conditionnement des Oreo 
1    | Transport             | Dans la Pattemobile !
etc.

Ainsi tu n'as plus qu'à faire une requete du genre :

SELECT usine.*, jointure.*, caracteristique.* FROM usine
LEFT JOIN jointure ON usine.id = jointure.id_usine
LEFT JOIN caracteristique ON jointure.id_caracteristique = caracteristique.id

Et avec ceci ( si j'ai pas fais de bêtises ) tu devrais te retrouver avec un tableau contenant tout ce que tu souhaites.

dutbas
Auteur

En fait c'est pas se que je souhaite.
Je veux gerrer les machines sous forme d'arborescence. Le but est de réaliser la gestion du parc machines (une GMAO en fait) d'une société qui possède aujourd'hui 2 usines (Bon de travaux, gestions des stocks de pièces détachées ...).

Le but de l'arborescence et de dire par exemple que le bon de travail n°1 est pour la machine X de la ligne 1 dans l'atelier de conditionnement de l'usine U

  • Usine U
    • conditionnement
      • Ligne 1
        • machine X

Le but de cet arborescence est de facilité la recherche des differents travaux. Par exemple :

  • Quand j'arrive à mon poste de travail et que je veux savoir se qu'à fait l'autre technicien le matin je fais un recherche sur l'usine entière,
  • Je peux aussi consulter l'histaurique de la machine X pour pour faire des calculs de rentabilité, ou pour prévoir des maintenances préventive,
  • Mais je peux aussi connaitre tous les problèmes qu'il y a eu sur chaques machines de la ligne 1 au cours de la production de se lot
  • ...

J'ai completement modifier la structure de ma base de données afin d'essayé de faire cet arborescence avec la représentation intevalaire comme l'explique grafikart sur son tuto : Lien du tutoriel

Mais je n'y arrive pas pour le moment.