在1个mysql查询中仅显示未分类的项目

时间:2012-08-04 09:24:03

标签: php mysql

我想知道是否可以转换下面的代码,这样它只需要1个查询而不是分配更多的查询? items表填充了超过10k的项目,以下方式,只需要很长时间,是否有更快的方式显示未分类的项目?

$CD1=mysql_query("select * FROM items");    
while($C1=mysql_fetch_array($CD1)){
    $sql=mysql_query("select * from category where sub='$C1[sub]'");
    if(mysql_num_rows($sql) == 0)
        echo "$C1[id]->$C1[sub]<br>";
}

2 个答案:

答案 0 :(得分:1)

您应该使用外连接和where子句来过滤没有类别的项目

SELECT i.* FROM items i LEFT OUTER JOIN category c ON i.sub = c.id WHERE c.id IS NULL

答案 1 :(得分:0)

在一个表中查找没有相应行的行的一种常见方法是使用左连接:

select id, sub
from items i
     left join category c on i.sub = c.sub
where c.sub is null

请注意,除了测试代码之外,您应该避免使用select *