MySQL - 比较来自Ajax数组的值并删除它们,如果不是在表中

时间:2014-05-06 13:37:03

标签: php mysql sql ajax arrays

使用POST METHOD $tab_tuto_sauvegarde = $_POST['tableau_valeurs_modifiees'];,Ajax请求会向我返回以下信息:

[Mots_cles_supprimes] => Array
(
    [0] => jambon
    [1] => rap
    [2] => tomate
)

我有这些表

TABLE 1 named 'Mots_cles'

|  mots_cles |
_____________
| jambon     |
|  rap       |
|  tomate    |

TABLE 2 named 'Mots_cles_et_tutoriels'

|  id_tutoriel ||  mots_cles  |
______________________________
| ID1          || rap         |
| ID1          || rap         |
| ID2          || tomate      |
| ID2          || rap         |
| ID2          || tomate      |

首先DELETE [index]来自tableau_valeurs_modifiees.['Mots_cles_supprimes'] TABLE 2的每个if (isset ($tab_tuto_sauvegarde['Mots_cles_supprimes'])){ $sql_Mots_cles_id_tutoriel = ""; foreach($tab_tuto_sauvegarde['Mots_cles_supprimes'] as $index => $valeur){ $sql_Mots_cles_id_tutoriel .= "('$id_tutoriel', '$valeur'), "; } if($sql_Mots_cles_id_tutoriel !== ""){ $sql_Mots_cles_id_tutoriel = substr($sql_Mots_cles_id_tutoriel, 0, -2); // Supprime la ',' à la fin de la chaine de caractere mysqli_query($BDD_connect, "DELETE FROM Mots_cles_et_tutoriels WHERE (id_tutoriel, mots_cles) IN (".$sql_Mots_cles_id_tutoriel.")"); ,如下所示:

[index]

效果很好!

然而,我需要的是tableau_valeurs_modifiees.['Mots_cles_supprimes'] TABLE 2 TABLE 2(此处:" jambon"," rap"" tomate&# 34;)将这些字词与DELETE进行比较,如果TABLE 1中不存在$stmt_mot_a_sup = mysqli_prepare($BDD_connect, "DELETE FROM Mots_cles SET mots_cles = ? "); mysqli_stmt_bind_param($stmt_mot_a_sup, "s", $mot_a_sup); foreach ($tab_tuto_sauvegarde['Mots_cles_supprimes'] as $Mots_cles_supprimes) { $mot_a_sup = $Mots_cles_supprimes; mysqli_execute($stmt_mot_a_sup); } ,则$tab_tuto_sauvegarde = $_POST['tableau_valeurs_modifiees'];

我想我的代码已经结束了(表1中每个单词都有DELETE),但如果这些单词在表1中不存在,它会错过我的条件......

90

我不知道,如果不存在于表2中的条件,那么>删除表1 ......?

谢谢!


编辑 - 更多信息

以下是两个表格:

1 /表" Mots_cles"其中包含所有关键字数据库 Table 'Mots_cles

2 /表" Mots_cles_et_tutoriels" wich countain属于每个id_tutorial的关键字 Table "Mots_cles_et_tutoriels"

我的帖子方法92回到我身边:

1 /一个ID(一个数字),如if (isset ($tab_tuto_sauvegarde['Mots_cles_supprimes'])){ $sql_Mots_cles_id_tutoriel = ""; foreach($tab_tuto_sauvegarde['Mots_cles_supprimes'] as $index => $valeur){ $sql_Mots_cles_id_tutoriel .= "('$id_tutoriel', '$valeur'), "; } if($sql_Mots_cles_id_tutoriel !== ""){ $sql_Mots_cles_id_tutoriel = substr($sql_Mots_cles_id_tutoriel, 0, -2); // Supprime la ',' à la fin de la chaine de caractere mysqli_query($BDD_connect, "DELETE FROM Mots_cles_et_tutoriels WHERE (id_tutoriel, mots_cles) IN (".$sql_Mots_cles_id_tutoriel.")"); id_tutoriel => 92 [Mots_cles_supprimes] => Array ( [0] => rap [1] => tyty [2] => er6 [3] => Kawasaki ) 或其他...对应教程

2 /表格中删除的几个单词' Mots_cles_et_tutoriel'对应的ID返回给我

所以,首先我删除表格中的几个单词' Mots_cles_et_tutoriel'像这样:

"rap"

然后,我需要的是,如果表中不再存在这些删除的单词" Mots_cles_et_tutoriels" (无论id ...),我还需要在表格中删除" Mots_cles" (删除所有数据库中的这些单词)。

例如,如果我的POST方法返回给我:

"tyty"

在表格" Mots_cles_et_tutoriels"我删除了"er6""kawasaki"92"er6",其中" id_tutoriel" = "kawasaki"

我想在表格中删除" Mots_cles"只是单词"rap""tyty"因为刚删除后,表格中不再存在#34; Mots_cles_et_tutoriels"与{< {1}}和{{1}}不同,它们已经存在于表格" Mots_cles_et_tutoriels"。

1 个答案:

答案 0 :(得分:1)

起初:很难读出混合的英语和法语:-)但我想我明白了。

DELETE FROM TABLE_1 t1 
WHERE t1.mots_cles not in (
    SELECT t2.mots_cles FROM TABLE_2 t2
)

这个简单的查询说你要删除TABLE_1中的每一行,它们在TABLE_2中没有并发值行。对于更大的数据库,这应该进行优化。