2010-08-31 29 views
-1

我想显示司,然后分类下每个部门和子类别下的每个catagory。但是,当我做我做,而我没有得到正确的结果...的PHP和MYSQL:尽管那个dosn't工作

例如我想要什么:

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(这是一个师)

PRODUITS papiers(这是一个categorie)

Distributeurs assortis(这是一个subcategorie)

Distributeurs assortis(这是相同的subcategorie ...)

Distributeurs assortis(并再次...)

Distributeurs assortis(并再次...)

(......)我收到相同的subcategorie 10线

你有你的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法使用近“AND __Produits_Sous_Cat .id_langue = 1 AND __Produits_Sous_Cat。可见=‘1行’”手动1

这里是我的代码:

$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)); 

非常感谢您的帮助。

回答

2

你的代码非常混乱。如果是作业或学习项目,那你就没问题。如果你正在开发的应用程序,你将不得不维护...哦,你会玩得开心。

我编辑了你的代码。试试这个:

$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

杂乱的代码作为一项功课是不好的;)同样的情况下,学习项目。这只是不好;):) – 2010-08-31 09:57:43

+0

非常感谢你,有效地是为了学习我的工作。这是完美的工作,我要读你的代码,并与我的比较,看看有什么问题! – 2010-08-31 12:12:42

+0

您遇到的问题之一是反向循环。如果你的第一个循环是分割循环,那么它必须是最外面的,并且你将它作为最内层。它应该是第一次进入。 环路1开始 回路2开始 循环3开始 ... 循环3结束 回路2结束 循环1点结束 你有这种方式 环路1开始 回路2开始 循环3开始 。 .. 循环1结束 循环2结束 循环3结束 – Alex 2010-08-31 13:21:18

0

此:

  } 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)); 

似乎落后 - 顺序DO的反向 - 它不应该是:

  } 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)); 

呢?

+0

工作真的很好,但仍然有错误 您的SQL语法错误;请检查与您的MySQL服务器版本对应的手册,以便在第一行使用'AND'__Produits_Sous_sousCat'.id_langue = 1 AND'__Produits_So'来使用正确的语法。 但真正感谢您的帮助! – 2010-08-31 12:09:29

0

在这个阶段不要太担心你的PHP,只是试图得到一个更强大的关系查询。通常,围绕查询进行循环表明某些事情是错误的。阅读MySQL中的连接,你会发现你可以用一个查询(被调用一次)替换你的4个查询(它被执行很多次),而你的4个查询则用一个简单的循环代替。

+0

我会为此学习!谢谢 !你称之为联接? – 2010-08-31 12:09:57