我想知道是否可以转换下面的代码,这样它只需要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>";
}
答案 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 *
。