2010-08-31 7 views
-1

Je voudrais afficher Division, puis les catégories sous chaque division et sous-catégories qui est sous chaque catégorie. Mais quand je fais mes tâches pendant que je ne reçois pas le bon résultat ...PHP et MYSQL: faire pendant que ça ne marche pas

exemple de ce que je veux:

Division Name 
Categorie 
    Sub-categorie 
    Sub-categorie 
    Sub-categorie 
Categorie 2 
    Sub-categorie 2 
    Sub-categorie 2 
    Sub-categorie 2 
Division Name 2 
Categorie 3 
... 

Sanitaire (qui est une division)

Produits papiers (qui est un catégorie)

Distributeurs assortis (c'est un subcategorie)

Distributeurs assortis (c'est la même subcategorie ...)

Distributeurs assortis (et encore ...)

Distributeurs assortis (et encore ...)

(...) je reçois le même subcategorie pour 10 lignes

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près « ET __Produits_Sous_Cat .id_langue = 1 ET __Produits_Sous_Cat .Visible = « 1 » » à la ligne 1

voici mon code:

$LANG = 1; 
mysql_select_db($database_dl, $dl); 
$query_divisionlist = "SELECT * 
         FROM `__Division` 
         WHERE `__Division`.id_langue = ".$LANG." 
          AND `__Division`.visible = '1'"; 

$divisionlist = mysql_query($query_divisionlist, $dl) or die(mysql_error()); 
$row_divisionlist = mysql_fetch_assoc($divisionlist); 
$totalRows_divisionlist = mysql_num_rows($divisionlist); 

do { echo '<p>'.$row_divisionlist['titre'].'</p>'; 
    mysql_select_db($database_dl, $dl); 
    $query_categorielist = "SELECT * 
          FROM `__Produits_Cat` 
          WHERE `__Produits_Cat`.id_Division = ".$row_divisionlist['id']." 
           AND `__Produits_Cat`.id_langue = ".$LANG." 
           AND `__Produits_Cat`.visible = '1'"; 

    $categorielist = mysql_query($query_categorielist, $dl) or die(mysql_error()); 
    $row_categorielist = mysql_fetch_assoc($categorielist); 
    $totalRows_categorielist = mysql_num_rows($categorielist); 

    do { echo '<p>'.$row_categorielist['titre'].'</p>'; 
    mysql_select_db($database_dl, $dl); 
    $query_scategorie = "SELECT * 
          FROM `__Produits_Sous_Cat` 
          WHERE `__Produits_Sous_Cat`.id_Produit_Cat = ".$row_categorielist['id']." 
          AND `__Produits_Sous_Cat`.id_langue = ".$LANG." 
          AND `__Produits_Sous_Cat`.visible = '1'"; 

    $scategorie = mysql_query($query_scategorie, $dl) or die(mysql_error()); 
    $row_scategorie = mysql_fetch_assoc($scategorie); 
    $totalRows_scategorie = mysql_num_rows($scategorie); 

    do { echo '<p>'.$row_scategorie['titre'].'</p>'; 
     mysql_select_db($database_dl, $dl); 
     $query_sscategorie = "SELECT * 
           FROM `__Produits_Sous_sousCat` 
           WHERE `__Produits_Sous_sousCat`.id_Produit_Sous_Cat = ".$row_scategorie['id']." 
           AND `__Produits_Sous_sousCat`.id_langue = ".$LANG." 
           AND `__Produits_Sous_sousCat`.visible = '1'"; 

     $sscategorie = mysql_query($query_sscategorie, $dl) or die(mysql_error()); 
     $row_sscategorie = mysql_fetch_assoc($sscategorie); 
     $totalRows_sscategorie = mysql_num_rows($sscategorie); 

     do { echo '<p>'.$row_sscategorie['titre'].'</p>'; 

     } while ($row_divisionlist = mysql_fetch_assoc($divisionlist)); 
    } while ($row_categorielist = mysql_fetch_assoc($categorielist)); 
    } while ($row_scategorie = mysql_fetch_assoc($scategorie)); 
} while ($row_sscategorie = mysql_fetch_assoc($sscategorie)); 

Merci beaucoup pour votre aide.

Répondre

2

votre code est extrêmement salissant. Si c'est un devoir ou un projet d'apprentissage, ça va. Si vous développez une application que vous devrez maintenir ... oh, vous allez vous amuser.

J'ai édité votre peu de code. Essayez ceci:

$LANG = 1; 

mysql_select_db($database_dl, $dl); 

// 
$divisionQuery = "SELECT * FROM `__Division` WHERE id_langue = $LANG AND visible = '1'"; 
$divisionResult = mysql_query($divisionQuery, $dl) or die(mysql_error()); 

// Scan through all divisions 
while ($divisionRow = mysql_fetch_assoc($divisionResult)) { 
    echo '<p>' . $divisionRow['titre'] . '</p>'; 

    // Get all division categories 
    mysql_select_db($database_dl, $dl); 
    $categoryQuery = "SELECT * FROM `__Produits_Cat` WHERE id_Division = $divisionRow[id] AND id_langue = $LANG AND visible = '1'"; 
    $categoryResult = mysql_query($categoryQuery, $dl) or die(mysql_error()); 

    // Scan through all categories 
    while ($categoryRow = mysql_fetch_assoc($categoryResult)) { 
     echo '<p>' . $categoryRow['titre'] . '</p>'; 

     // Get all sub-categories 
     mysql_select_db($database_dl, $dl); 
     $subCategoryQuery = "SELECT * FROM `__Produits_Sous_Cat` WHERE id_Produit_Cat = $categoryRow[id] AND id_langue = $LANG AND visible = '1'"; 
     $subCategoryResult = mysql_query($subCategoryQuery, $dl) or die(mysql_error()); 

     // Scan through sub-categories 
     while ($subCategoryRow = mysql_fetch_assoc($subCategoryResult)) { 
      echo '<p>' . $subCategoryRow['titre'] . '</p>'; 

      // Get all sub-sub-categories 
      mysql_select_db($database_dl, $dl); 
      $subSubCategoryQuery = "SELECT * FROM `__Produits_Sous_sousCat` WHERE id_Produit_Sous_Cat = $subCategoryRow[id] AND id_langue = $LANG AND visible = '1'"; 
      $subSubCategoryResult = mysql_query($subSubCategoryQuery, $dl) or die(mysql_error()); 

      // Scan through all sub-sub-categories 
      while ($subSubRow = mysql_fetch_assoc($subSubCategoryResult)) { 
       echo '<p>' . $subSubRow['titre'] . '</p>'; 
      } 
     } 
    } 
} 
+0

Code malpropre comme un devoir est mauvais;) Il en va de même pour les projets d'apprentissage.Ce n'est tout simplement pas correct;) :) –

+0

Merci beaucoup, effectivement c'est pour apprendre que je travaille avec ça. Cela fonctionne parfaitement, je vais lire votre code et le comparer au mien pour voir quel est le problème! –

+0

l'un des problèmes que vous avez eu était des boucles inversées. Si votre première boucle est une boucle de division, elle a le plus grand nombre et vous l'avez le plus à l'intérieur. Il est censé être le premier en dernier. boucle 1 Démarrer boucle 2 Début boucle 3 début ... boucle 3 Fin boucle 2 Fin boucle 1 Fin Vous avez eu cette façon boucle 1 Démarrer boucle 2 Début boucle 3 début . .. Boucle 1 Fin Boucle 2 Fin Boucle 3 Fin – Alex

0

Ce:

  } while ($row_divisionlist = mysql_fetch_assoc($divisionlist)); 
    } while ($row_categorielist = mysql_fetch_assoc($categorielist)); 
    } while ($row_scategorie = mysql_fetch_assoc($scategorie)); 
} while ($row_sscategorie = mysql_fetch_assoc($sscategorie)); 

semble en arrière - l'ordre est inverse de choses à faire - devrait-il pas:

  } while ($row_sscategorie = mysql_fetch_assoc($sscategorie)); 
    } while ($row_scategorie = mysql_fetch_assoc($scategorie)); 
    } while ($row_categorielist = mysql_fetch_assoc($categorielist)); 
} while ($row_divisionlist = mysql_fetch_assoc($divisionlist)); 

à la place?

+0

fonctionne vraiment mieux mais a toujours une erreur Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'AND '__Produits_Sous_sousCat'.id_langue = 1 ET' __Produits_So' à la ligne 1 mais merci beaucoup pour votre aide! –

0

Ne vous inquiétez pas autant de votre PHP à ce stade, mais essayez simplement d'obtenir une requête plus robuste et relationnelle. Généralement, avoir une boucle autour d'une requête est une indication que quelque chose ne va pas. Lisez sur Joins dans MySQL et vous devriez trouver que vous pouvez remplacer vos 4 requêtes (qui sont exécutées plusieurs fois) avec 1 requête (appelée une fois), et vos 4 boucles imbriquées avec une boucle beaucoup plus simple.

+0

Je vais apprendre pour ça! Je vous remercie ! Vous appelez ça des jointures? –