[英]MySQL - Improve Query Performance
我有一个POST方法$tab_tuto_sauvegarde = $_POST['tableau_valeurs_modifiees'];
谁收到Ajax请求后会向我返回此类信息:
(
[Categories] => Array
(
[Cat_1] => AA
[Cat_2] => DD
)
)
但这可能是其他...
(
[Categories] => Array
(
[Cat_1] => CC
[Cat_2] => HH
[Cat_3] => AA
)
)
我有一个名为'Groupe_Categories'
的表
| id_groupe_categorie || titre_categorie_nv1 | titre_categorie_nv2 | titre_categorie_nv3 |
______________________________________________________________________________________________
| 1 || AA | DD | |
| 2 || AA | EE | RR |
| 3 || BB | FF | FF |
| 4 || CC | HH | AA |
...
还有另一个名为Wheel
表
| id_wheel || id_groupe_categorie
_____________________________________
| 1 || 1
| 2 || 5
| 3 || 9
| 4 || 11
...
我要做的就是在函数[Cat_1]
[Cat_2]
...匹配'id_groupe_categorie'
表'Groupe_Categories'
并更新此'id_groupe_categorie'
表Wheel
在第一个示例中,结果为1
在第二个示例中,结果为4
为此,我编写了以下代码:
if (isset ($tab_tuto_sauvegarde['Categories'])){
$cat1 = $tab_tuto_sauvegarde['Categories']['Cat_1'];
$cat2 = $tab_tuto_sauvegarde['Categories']['Cat_2'];
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_3'])){
$titre_cat3 = $tab_tuto_sauvegarde['Categories']['Cat_3'];
$column_cat3 = "titre_categorie_nv3" ;
$cat3 = "AND $column_cat3 = '$titre_cat3'" ;
}else $cat3 = "";
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_4'])){
$titre_cat4 = $tab_tuto_sauvegarde['Categories']['Cat_4'];
$column_cat4 = "titre_categorie_nv4" ;
$cat4 = "AND $column_cat4 = '$titre_cat4'" ;
}else $cat4 = "";
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_5'])){
$titre_cat5 = $tab_tuto_sauvegarde['Categories']['Cat_5'];
$column_cat5 = "titre_categorie_nv5" ;
$cat5 = "AND $column_cat5 = '$titre_cat5'" ;
}else $cat5 = "";
$stmt_cat = mysqli_query($BDD_connect, "SELECT id_groupe_categorie FROM Groupe_de_categories WHERE titre_categorie_nv1 = '$cat1' AND titre_categorie_nv2 = '$cat2' '$cat3' '$cat4' '$cat5'");
//$stmt_cat = replace($stmt_cat, '\'\'', '');
$row_stmt_cat = mysqli_fetch_assoc($stmt_cat);
$id_gpe_cat = $row_stmt_cat['id_groupe_categorie'];
mysqli_query($BDD_connect, "UPDATE Tutoriels SET id_groupe_categorie = '$id_gpe_cat', niveau_choix_categorie_autre ='', categorie_autre='' WHERE id_tutoriel = '$id_tutoriel'");
}
首先,此代码有效,但我认为他很沉重...有没有办法简化代码?
其次,在我的代码中,如果[Cat_3]不像我的第一个示例那样存在,则在"SELECT id_groupe_categorie FROM Groupe_de_categories WHERE titre_categorie_nv1 = '$cat1' AND titre_categorie_nv2 = '$cat2' '$cat3' ");
'$cat3'
被浮动' '
代替...有效,但是如何删除该浮动''
?
谢谢你的帮助 !
此代码应解决您的两个“问题”:
if (isset ($tab_tuto_sauvegarde['Categories'])){
$cat1 = $tab_tuto_sauvegarde['Categories']['Cat_1'];
$cat2 = $tab_tuto_sauvegarde['Categories']['Cat_2'];
$sSelect = "SELECT id_groupe_categorie FROM Groupe_de_categories WHERE titre_categorie_nv1 = '$cat1' AND titre_categorie_nv2 = '$cat2'";
$i = 3;
while ($i < 6) {
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_'.$i])){
$titre_cat = $tab_tuto_sauvegarde['Categories']['Cat_'.$i];
$column_cat = "titre_categorie_nv".$i ;
$sSelect .= " AND $column_cat = '$titre_cat' " ;
}
$i++;
}
$stmt_cat = mysqli_query($BDD_connect, $sSelect);
//$stmt_cat = replace($stmt_cat, '\'\'', '');
$row_stmt_cat = mysqli_fetch_assoc($stmt_cat);
$id_gpe_cat = $row_stmt_cat['id_groupe_categorie'];
mysqli_query($BDD_connect, "UPDATE Tutoriels SET id_groupe_categorie = '$id_gpe_cat', niveau_choix_categorie_autre ='', categorie_autre='' WHERE id_tutoriel = '$id_tutoriel'");
}
为了缩短您的代码,您可以按以下方式使用for循环:
for($i=1;$i<=5;$i++) {
${cat_ . $i} = (isset($tab_tuto_sauvegarde['Categories']["Cat_".$i]) ? $tab_tuto_sauvegarde['Categories']["Cat_".$i] : "");
}
如我所见,如果未设置数组项,则要为其创建一个空变量。 上面的代码将为您完成此任务。
您可以这样更改代码:
$cat1 = $tab_tuto_sauvegarde['Categories']['Cat_1'];
$cat2 = $tab_tuto_sauvegarde['Categories']['Cat_2'];
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_3'])){
$titre_cat3 = $tab_tuto_sauvegarde['Categories']['Cat_3'];
$column_cat3 = "titre_categorie_nv3" ;
$cat3 = "AND $column_cat3 = '$titre_cat3'" ;
}else $cat3 = "";
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_4'])){
$titre_cat4 = $tab_tuto_sauvegarde['Categories']['Cat_4'];
$column_cat4 = "titre_categorie_nv4" ;
$cat4 = "AND $column_cat4 = '$titre_cat4'" ;
}else $cat4 = "";
if (isset ($tab_tuto_sauvegarde['Categories']['Cat_5'])){
$titre_cat5 = $tab_tuto_sauvegarde['Categories']['Cat_5'];
$column_cat5 = "titre_categorie_nv5" ;
$cat5 = "AND $column_cat5 = '$titre_cat5'" ;
}else $cat5 = "";
对此:
for($i=1;$i<=5;$i++) {
${cat_ . $i} = (isset($tab_tuto_sauvegarde['Categories']["Cat_".$i]) ? $tab_tuto_sauvegarde['Categories']["Cat_".$i] : "");
}
为了理解它,我为您编写了一个独立的示例代码,因为我不知道您的完整代码,因此请尝试使用此小代码段:-)
<?
$array1 = array();
$array1["Cat_1"] = "cc";
$array1["Cat_2"] = "dd";
$array1["Cat_3"] = "rr";
for($i=1;$i<=4;$i++) {
${cat_ . $i} = (isset($array1["Cat_".$i]) ? $array1["Cat_".$i] : "-");
}
echo $cat_1;
echo $cat_2;
echo $cat_3;
echo $cat_4;
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.