代码生成6k mySQL查询,当然可以优化

时间:2012-01-31 22:34:28

标签: php mysql select

我有一段PHP代码可以为mySQL生成超过6000个查询,我觉得这可以做得更好......

$q0 = "SELECT id_productFROM products";     
$e0 = mysql_query($q0) or die("Select failed: " . mysql_error());

while($r0 = mysql_fetch_array($e0)){    

    $id_product = $r0['id_product'];

    $q1 = "SELECT * FROM productspeople WHERE id_product = $id_product ";       
    $e1 = mysql_query($q1) or die("Select failed: " . mysql_error());

    if(mysql_num_rows($e1) == 0){ $count++; }else{ }

}

echo $count. "<br />";

我的问题是......有没有更好的方法来计算&#34;非出现&#34;另一个表中表的certaing id字段?如果是这样......怎么样?

提前致谢,并感谢我(非常可能)了解我的这种无聊。

2 个答案:

答案 0 :(得分:5)

一个查询。

SELECT COUNT(*) AS count 
  FROM products
 WHERE NOT EXISTS (
         SELECT 1 FROM productspeople WHERE id_product = products.id_product
       )

哦,如果productspeople.id_product上有索引,那将会非常有用。

作为一般提示,尝试在数据库上尽可能多地完成工作。相比之下,在PHP和数据库之间来回发送查询是非常低效的。

答案 1 :(得分:2)

选择没有匹配人的所有产品行:

SELECT products.* , COUNT( productpeople.id_product ) AS num 
FROM products
LEFT JOIN people ON products.id_product = productpeople.id_product
GROUP BY productpeople.id_product
HAVING num=0