gpt4 book ai didi

php - 脚本太慢,mysql join?

转载 作者:行者123 更新时间:2023-11-29 02:06:21 25 4
gpt4 key购买 nike

我正在编写一个带有产品过滤器的脚本。一切正常,但速度太慢。原因是查询太多。 Query5 选择大约 200 个条目。 Query12 在 130.000 个条目中“搜索”。

是否有可能使用更少的查询使 mysql 连接或更快的连接?

    <?php
$query5 = mysql_query("SELECT id,fabrikant,naam FROM producten_new WHERE icecat_cat='".secure_in($obj->icecat)."'".$selecteren."");
while($row5 = mysql_fetch_assoc($query5)){

foreach($_GET as $key=>$value){
if($key != "p" AND $key != "id" AND $key != "merk" AND $key != "submit" AND $value != "0"){

$query12 = mysql_query("SELECT COUNT(id) as aantal FROM producten_specs WHERE name='".secure_in(str_replace("_", " ", $key))."' AND value='".secure_in($value)."' AND product_id='".secure_in($row5['id'])."'");
$data12 = mysql_fetch_assoc($query12);

if($data12['aantal']){
$product_present = TRUE;
} else {
$product_present = FALSE;
break;
}

}
}
if($product_present){
echo $row5['id']."<br />";
$product_present = FALSE;
}
}
?>

谢谢。

编辑:好的,新的开始。我希望这样更好(更快):

        //Select products from category and brand
$query5 = mysql_query("SELECT id FROM producten_new WHERE icecat_cat='".secure_in($obj->icecat)."'".$selecteren."");
while($row5 = mysql_fetch_assoc($query5)){
$query5_ids .= $row5['id'].", ";
}
//Remove last ','
$query5_ids = substr($query5_ids, 0, -2);

//Get all $_GET's
foreach($_GET as $key=>$value){
if($key != "p" AND $key != "id" AND $key != "merk" AND $key != "submit" AND $value != "0"){
$specs_gets .= $key.",".$value.";";
$count_gets++;
$selection .= "name='".secure_in(str_replace("_", " ", $key))."' AND value='".secure_in($value)."' OR ";
}
}
//Remove last ';'
$specs_gets = substr($specs_gets, 0, -1);


//$selection = " AND ".substr($selection, 0, -4);
$selection = substr($selection, 0, -4);


//THE query..
//$query12 = mysql_query("SELECT product_id FROM producten_specs WHERE product_id IN ('".secure_in($query5_ids)."') ".$selection." ORDER BY product_id ASC");
$query12 = mysql_query("SELECT product_id FROM producten_specs WHERE ".$selection." ORDER BY product_id ASC");
while($row12 = mysql_fetch_assoc($query12)){

if($product_hold == $row12['product_id']){
$product_hold_count++;
} else {
$product_hold_count = FALSE;
$product_hold = $row12['product_id'];
$product_hold_count = 1;
}

if($product_hold_count == $count_gets){

$query12_ids_ok .= $row12['product_id'].", ";
$count_products++;
}

}
//Remove last ','
$query12_ids_ok = substr($query12_ids_ok, 0, -2);

编辑2网站链接:snip

编辑3更多信息:

网址示例:

index.php
?p=categorie
&id=5
&brand=Asus
&Display_inch=0
&Resolution=0
&Buldin_camera=0
&Chipset=0
&Processor-speed=2400+MHz
&Processorfamilie=0
&Hard+disk-interface=0
&Total+capacitie=500+GB
*snip (because its very long)*
&submit=Submit+Filter

数据库:

product_new(包含 3500 个条目)- 包含一般产品信息

id、供应商、价格、icecat_cat、名称等

1、华硕、500、笔记本、K72F

product_specs(包含 130.000 个条目)- Contians 产品规范

id, product_id, cat, name, value

1, 1, 处理器,处理器速度,2400 Mhz

2, 1, 硬盘, 总容量, 500 GB

编辑4我越来越近了,请参阅我第一次编辑中的代码,只有 product_id IN ('".secure_in($query5_ids)."') 必须添加到 query12 中。然后我得到我想要的结果,而且速度更快!有人吗?

最佳答案

因为你是荷兰人(可以在你的程序中看到)我也会用荷兰语发布我的答案。


Ik heb 1 puntje al als snelheid verbetering: omdat je $product_niet_aanwezig op true zet doet hij de rest van de foreach wel sneller maar hij doet het niet te min。 Je kan ook een break statement erin zetten。 Dan“中断”了 foreach 循环。


我有一个改进点:因为您将 $product_niet_aanwezig 设置为 true 它将继续更快地完成 foreach 循环的其余部分,但它仍然会这样做。您还可以使用 break 语句“中断”foreach 循环。

关于php - 脚本太慢,mysql join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com