我有一段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字段?如果是这样......怎么样?
提前致谢,并感谢我(非常可能)了解我的这种无聊。
答案 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