如果外键等于主键,则执行while循环和Do while循环

时间:2012-02-21 18:20:15

标签: php

我对php很新,但我学得很快,我有一个问题,希望你能帮助我。我做了一些谷歌搜索,但找不到答案。

我正在尝试使用两个级别进行动态下拉菜单 - 我已经设置了数据库并安装了数据,第一级有主键和类别名称,下一级有主键,foriegn键和子类别名称。

我为超类的类别创建了一个do while循环!现在我正在尝试插入子类别。我会试着总结一下我想要实现的目标。

在每个catergory运行另一个循环之间的类别while循环显示所有子类别,其中类别的主键与子类别的foriegn键匹配。然后继续。

e.g。

Category
  Sub category
  Sub category
  Sub category 
Category
  Sub category
Category
  Sub category
  Sub category

依旧......

关于如何编码的任何建议?

我希望这是有道理的。

提前谢谢!

最基本的问候。

<?php 

// Query member data from the database and ready it for display

$category_sql = "SELECT * FROM tm_product_category";
$category_query = mysql_query($category_sql) or die(mysql_error());
$categorylist = mysql_fetch_assoc($category_query);
?>
<?php 

//Connect to the database through our include 
include_once "connect_to_mysql.php";
// Query member data from the database and ready it for display

$subcategory_sql = "SELECT * FROM tlk_sub_cat";
$subcategory_query = mysql_query($subcategory_sql) or die(mysql_error());
$subcategorylist = mysql_fetch_assoc($subcategory_query);
?>








<?php do { ?>

    <ul><li><a href="category.php?pk_cat_id=<?php echo $categorylist['pk_cat_id'];?>"><?php echo  $categorylist['category']; ?></a></ul>

      <?php

 if ($categorylist['pk_cat_id'] == $subcategorylist['fk_cat_id'])
    {
     do { ?>

           <li><a href="subcategory.php?pk_cat_id=<?php echo $subcategorylist['pk_sub_cat_id'];?>"><?php echo $subcategorylist['txt_sub_cat']; ?></a></li>

          <?php } while ($subcategorylist = mysql_fetch_assoc($subcategory_query));
        ; } 
    ?>

    <?php } while ($categorylist = mysql_fetch_assoc($category_query));

    ?>

我所有的ATM都是;

类别   所有子类别的列表 类别 空间 类别 空间 类别 空间 直到类别用完。

1 个答案:

答案 0 :(得分:0)

您可以使用JOIN执行单个查询,例如INNER JOIN,然后遍历返回的记录集。如果前一个外键与当前外键不同,则您将进入新的主记录,{do magic}与主记录相关,然后{do magic}表示当前子记录,否则,只需{do magic}目前的子记录。

编辑:

SELECT tm_product_category.*, tlk_sub_cat.* 
FROM tm_product_category INNER JOIN tlk_sub_cat ON
tm_product_category.pk_cat_id = tlk_sub_ca.fk_cat_id

通过预先添加表名和句点来引用每个表的字段。使用mysql的AFAIK,如果字段是唯一的,您可以不使用表名,但通常保留完整性。 MySQL网站有文档讨论其他连接类型。