我有两个表,一个是category,另一个是products.Catid对于两个表都很常见。我需要使用两个while循环来显示表中的数据。它的工作正常,但如果处理更多类别,则会花费更多时间并抛出错误。
<table>
<tr>
<?php
$cat=mysql_query("select * from category");
while($catquery=mysql_fetch_assoc($cat))
{?>
<td><?php echo $catquery['catid'] ?></td>
<td><?php echo $catquery['catname']?></td>
<?php
$catid=$catquery['catid'];
}?>
<?php
$product=mysql_query("select * from product where catid=$catid");
while($productquery=mysql_fetch_assoc($product))
{
?>
<td><?php echo $productquery['productname'] ?></td>
</tr>
</table>
答案 0 :(得分:0)
select * from category a left join product b
on a.catid = b.catid
更好地逐列定义列,轻松将数据导入PHP,如:
select a.catid as category_catid,
a.catname as category_name,
b.productname as product_productname
from category a left join product b
on a.catid = b.catid
如果您想显示所有产品,即使catid
已被删除,您也可以使用此功能(与FULL JOIN
相同):
select a.catid as category_catid,
a.catname as category_name,
b.productname as product_productname
from category a left join product b
on a.catid = b.catid
union
select a.catid as category_catid,
a.catname as category_name,
b.productname as product_productname
from category a right join product b
on a.catid = b.catid
这是您获取数据的方式:
while($catquery=mysql_fetch_assoc($cat))
{?>
<td><?php echo $catquery['category_catid'] ?></td>
<td><?php echo $catquery['category_name']?></td>
<td><?php echo $catquery['product_productname']?></td>
....
答案 1 :(得分:0)
尝试此查询。它将列出所有类别详细信息及其各自的产品名称(catproducts - 在以下查询中)。
<table>
<?php
$cat=mysql_query("select *,(select group_concat(productname) as catproducts from product where product.catid= category.catid) as catproducts from category");
while($catquery=mysql_fetch_assoc($cat)) { ?>
<tr>
<td><?php echo $catquery['catid']; ?></td>
<td><?php echo $catquery['catname'];?></td>
<td><?php echo $catquery['catproducts']; ?></td>
</tr>
<?php }//end while ?>
</table>
所以你的输出将是
catid catname catproducts
1 stationary book,pen
2 leather wallets,bags