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

Php 生成6k mySQL查询的代码,这些查询当然可以优化,php,mysql,select,Php,Mysql,Select,我有一段PHP代码,可以生成超过6000个mySQL查询,我觉得这可以做得更好 $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

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

$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 />";
$q0=“从产品中选择id\u productFROM products”;
$e0=mysql\u query($q0)或die(“选择失败:”.mysql\u error());
而($r0=mysql\u fetch\u数组($e0)){
$id_product=$r0['id_product'];
$q1=“从产品人员中选择*,其中id\u product=$id\u product”;
$e1=mysql_查询($q1)或die(“选择失败:”.mysql_error());
if(mysql_num_rows($e1)==0){$count++;}else{}
}
echo$count。“
”;
我的问题是。。。是否有更好的方法计算另一个表中某个表的某个id字段的“未发生”次数?如果是的话。。怎么做

提前感谢您,感谢您理解我(很可能)的这一点。

一个问题

SELECT COUNT(*) AS count 
  FROM products
 WHERE NOT EXISTS (
         SELECT 1 FROM productspeople WHERE id_product = products.id_product
       )
哦,如果在
productsOple.id\u product
上有一个索引,这将非常有帮助


作为一般提示,尝试在数据库上做尽可能多的工作。相比之下,在PHP和DB之间来回发送查询效率低得离谱。

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

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

作为旁白,在编写查询时始终转义变量,即使它看起来应该是安全的-
其中id\u product=”。mysql\u real\u escape\u string($id\u product)。“;
@John作为旁白,始终使用查询参数而不是
mysql\u real\u escape\u string()
;)将必须查看您的两条评论!:)阿方索,他指的是我们他回答的查询,该查询经过优化,不必使用任何PHP变量。对于将来的使用,请在此处阅读有关mysql\u real\u escape\u字符串的更多信息:@Afonso是的,该评论主要是针对John的。但无论如何,请查看参数化查询并使用它们。这不是他是最好的方法。是的……那里有一个索引!这些带有select的查询似乎要花很多时间才能执行……这正常吗?@Afonso不,这不正常。如果只有6000个产品,这应该会立即返回。你真的确定索引吗?(
productspeople.id\u product
,不仅是
products.id\u product
)嗯……我想是这样的!:)products表中有id\u product,people表作为id\u person,Productpeople表作为id\u productperson……这个表中只有两个字段是id\u product,id_person@Alfonso“我想是的"? 只需查看一下表定义即可如果查询速度慢,那么我很确定索引丢失了。索引就在那里!我重新启动了mysql服务器,您给我的查询执行得又快又好!谢谢你的耐心,伙计!