Boucle PHP

Fermé
adrienb4 - 4 janv. 2010 à 14:43
 Adrienb4 - 7 janv. 2010 à 11:17
Bonjour,

J'explique mon problème. Pour le boulot je dois faire une boucle en PHP qui parcourt une base de données Mysql pour afficher si un switch donnée et parent d'un autre switch. Jusque là pas de problème. Cependant, il faut que la boucle regarde et affiche si le switch parent n'est pas déjà parent d'un autre switch. La boucle doit fonctionner quelque soit le niveau de parenté. (Ex : le switch 1 est parent du 2 qui lui mm est parent du 3. Ou alors le switch 5 est parent du 6).

La boucle doit m'afficher qqe chose du style

Le switch 1 est parent du switch 2
Le switch 1 est "grand pere" du switch 3
....

En esperant avoir était clair.

J'ai grand besoin de votre aide :)

6 réponses

rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
4 janv. 2010 à 14:59
Bonjour,

Faire la boucle c'est pas forcément le problème.
Car des usines à gaz en php on y arrive facilement. Ce qu'il faut c'est réfléchir pour ne pas en faire.

Ce sont tes tables de ta base de données que je voudrais bien voir comment tu les as fait.
Donne seulement le nom des tables et les champs et je te dirais si c'est possible ou pas de faire ta boucle.

@+
0
Bonjour et merci pour votre réponse

Dans ma base MySQL, j'ai une table "switch" qui contient les champs "nom,id et id_parent".
J'ai beau tourner le pb dans tous les sens, je pas moyen d'y arriver.

Merci
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
4 janv. 2010 à 15:41
Re,

Les champs de la table me semble tout à fait correcte.
Voici une idée de boucle à vérifier et à modifier selon votre configuration.

<?php
function rechercher_switch($id)
{
//recupere le nombre de ligne dans la table
$conn = db_connect();
$query = "select * from switch where id = '$id'";

$resultat = @mysql_query($query, $conn);
$nbr_ligne = mysql_num_rows($resultat);

$cpt = 0;
while ($cpt < $nbr_ligne) {

$sql = "select * from switch where id = '$id'";

$result = mysql_query($sql, $conn);



while ($sql = mysql_fetch_array($result))

{
$query_sr = "select * from switch where id_parent = '$sql[id]'";

$result1 = mysql_query($query_sr, $conn);
return $sql[nom];

}
$cpt = cpt + 1;
}
}
?>

Ensuite tu appelles ta fonction avec :

<?php
$nom_switch = rechercher_switch(1);
echo $nom_switch;
?>
il va te lister les noms de tous les switchs qui appartient à l'id = 1.
Après il faut que toi tu récupères les variables $id avec un GET ou un POST.
pour que le script ci-dessus devient du genre à toi d'adapter :
<?php
$id = $_GET[id];
$nom_switch = rechercher_switch($id);
echo $nom_switch;
?>

ATTENTION il faut que tous les champs des id_parents père ont comme valeur 0.
id id_parent nom
1 0 switch1
2 1 switch1_enfant1
3 1 switch1_enfant2
4 0 switch2
5 4 switch2_enfant1
etc....
0
Ok merci pour cette reponse rapide. je test la boucle et vous tiens au courant. et encore merci
0
adrienb4 > adrienb4
4 janv. 2010 à 17:28
Si j'ai bien compris la boucle, elle ne me permet pas d'avoir le résultat que je souhaite.
Voila un exemple de se que peut contenir ma table SQL

ID | NOM | ID_PARENT
======================
12 | HP23 | 45
15 | HP24 | 12
17 | HP25 | 15
19 | HP26 | 17
....

Ainsi on peut voir que

HP24 est parent de HP 25 et que HP25 est parent d HP26.
Mais aussi que HP23 est parent de HP24 et que HP23 n'a pas de parents.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 janv. 2010 à 18:19
et en cherchant du coté des requettes sql ?

SELECT NOM FROM switch WHERE ID_PARENT=ID
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
4 janv. 2010 à 20:51
Bonsoir,

Effectivement après vérification c'est pas vraiment ce qu'il fallait faire.
Je vais chercher du coté sql comme préconise Alain_42.
Le challenge m'intéresse je me penche dessus Adrienb4.
Mais si entre temps tu as la solution merci de poster quand même.

@+
0
Bonsoir

J'ai pas la solution, mais une idée. Je vais créer un tableau php qui pour chaque switch va associer les switch "fils". Après avec une commande (je ne sais plus la quelle), je vais parcourir ce tableau pour "reconstituer" toute la parenté. Je bosse demain sur sa et tien au courant

Bonne soirée
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
4 janv. 2010 à 22:08
Bonsoir,

Envoi ton idée quand même.
Sinon j'ai trouvé ça :

Je n'étais pas loin avec mon précédent script mais celui là à l'air pas mal plus légers et je l'ai testé en même temps avec tes données.

<?php

$conn = db_connect(); // connexion a la base de donnee

$sql = "SELECT* FROM switch";
$resultat = @mysql_query($sql, $conn);

while ($query = mysql_fetch_array($resultat)) {

$sql_r = "SELECT* FROM switch where id_parent = $query[id]";
$result = @mysql_query($sql_r, $conn);

while($query_r = mysql_fetch_array($result)) {
echo $query_r[nom]." Je suis l'enfant de : ".$query[nom]."<br>";
}
}
?>
J'espère que c'est la bonne solution.
Bonne soirée
0
Bonjour

Comme promis, voila la solution à mon problème. Depuis lundi je cherche à faire trop compliqué alors que sa marche en qqe lignes.


$id='156'; //Id du switch
$id_origine=$id;

echo $id_origine;
echo '<br>';
while (true) {
$requete1 = 'SELECT id_parent FROM switches WHERE id=\''.$id.'\';';
$resultat1 = mysql_query($requete1);

while ($query1 = mysql_fetch_row($resultat1)) {
if ($query1[0]=='0') {
break 2; // Quitte les deux boucles while
}
else {
echo $query1[0];
$id=$query1[0];
echo '<br>';
}
}

}

Ce qui donne comme résultat d'afficher les uns en dessous des autres les switchs en fonction de leur parenté.

Je remercie ttes les personne qui se sont penchées sur le problème :)
0