Php 而在不同的MySQL表中
我有两张桌子:Php 而在不同的MySQL表中,php,mysql,Php,Mysql,我有两张桌子: 猫 id,cat_名称 子类别 id,子类别名称,在类别下 我想制作一个列表,将子类别加载到正确的类别中 问题是第二个循环,我不能让它工作 我做错了什么 <? $query = "SELECT * FROM `Cat`"; $result = $mysqli->query($query); while ($row = $result->fetch_assoc()){ echo '&l
<?
$query = "SELECT * FROM `Cat`";
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()){
echo '<li><a href="#">'
. $row['cat_name'] .
'</a><ul>';
$query2 = "SELECT * FROM `SubCat` WHERE under_cat = '". $row['cat_id'] ."'";
$result2 = $mysqli->query($query2);
while ($row2 = $result->fetch_assoc()){
echo '<li><a href="#">'
. $row2['subcat_name'] .
'</a></li>';
}
echo '</ul></li>';
}
?>
编辑:
来自同一类别的两个列表
代码如下:
<?
$query = "SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;";
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()){
echo '<li><a href="#">'
. $row['cat_name'] .
'</a><ul>';
if($row['cat_id'] === $row['under_cat']){
echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';
我讨厌做
选择*
,因为它们的维护问题,但要处理您所做的事情,只需做一个加入
:
"SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"
这将返回您想要的结果集,但您需要修改PHP以相应地创建列表,如下所示:
if($row['cat_id'] === $id){
echo '<li><a href="#">'.$row2['subcat_name'].'</a></li>';
} else {
echo '</ul></li><li><a href="#">'.$row['cat_name'].'</a><ul>';
iF(!empty($row['subcat_name'])){
echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';
}
}
$id = $row['cat_id'];
你问为什么要这么努力?因为这将提供您想要的结果集,而只查询一次。以前构建它的方式会查询数百万次,这会杀死服务器并大大降低性能
希望这对您的问题和您的整体实现知识都有帮助。它做错了什么?您是指
$row2=$result2->fetch_assoc()
,有可能吗?它可以工作了,谢谢thomas!如果只使用一个表来显示猫和子猫,则可以使用多个深度,这样会更容易。要做到这一点,你可以使用一个parent_id可为空的字段。谢谢你,我的朋友,但这超出了我的水平,我无法以你的方式让它工作。我试图让它工作,但问题是,它为每个子类别加载一个新列表,即使它来自同一类别。。。请看编辑后的帖子:)
if($row['cat_id'] === $id){
echo '<li><a href="#">'.$row2['subcat_name'].'</a></li>';
} else {
echo '</ul></li><li><a href="#">'.$row['cat_name'].'</a><ul>';
iF(!empty($row['subcat_name'])){
echo '<li><a href="#">'.$row['subcat_name'].'</a></li>';
}
}
$id = $row['cat_id'];
"SELECT * FROM Cat INNER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"