0

我想知道是否可以在下面转换此代码,以便它只需要 1 个查询而不是分配更多查询?项目表充满了超过 1 万个项目,而下面的方式,只需要很长时间,有没有更快的方法来显示未分类的项目?

$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>";
}
4

2 回答 2

1

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

SELECT i.* FROM items i LEFT OUTER JOIN category c ON i.sub = c.id WHERE c.id IS NULL
于 2012-08-04T09:36:57.747 回答
0

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

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

请注意,除了测试代码之外,您应该避免select *使用任何其他内容。

于 2012-08-04T09:39:50.687 回答