SQL - 比较Ajax数组中的值并删除它们如果不在表中

时间:2014-05-05 16:16:13

标签: mysql sql

我有这张桌子

TABLE 1

|  WORD |
_________
| word1 |
| word2 |
| word3 |

TABLE 2

|  ID ||  WORD |
__________________
| ID1 || word1 |
| ID1 || word2 |
| ID2 || word1 |
| ID2 || word3 |
| ID2 || word2 |
| ID3 || word2 |
| ID3 || word4 |
| ID4 || word5 |
| ID5 || word5 |

我查询:

SELECT WORD, count(WORD)
FROM TABLE 2 
WHERE WORD in ('word1', 'word2', 'word3', 'word7', 'word8')
GROUP BY WORD

它给我一个这样的表:

|  WORD ||  COUNT(WORD) |
_________________________
| word1 ||      2        |
| word2 ||      3        |
| word3 ||      1        |

但我需要的是反过来......我需要一个带有'word7'和'word8'的数组(所有匹配的数字都是num_rows = 0 ......)

当我得到这个结果时,我想在表1中使用它们来删除它们

我试过,但我没有正确的方式......

if(mysql_num_rows($mots_cles_count) == 0) {
            mysqli_query($BDD_connect, "DELETE FROM TABLE 1 WHERE (WORD) IN ('word7'), ('word8');
        }


编辑:比较Ajax数组中的值并删除它们如果不在表中



我的代码已经发展......

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

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

对于[index]的每个tableau_valeurs_modifiees.['Mots_cles_supprimes'](此处:“jambon”,“rap”和“tomate”),将这些单词与TABLE 2进行比较,如果还没有TABLE 2 ,在TABLE 1

中删除它们

我想我的代码已经结束了(TABLE 1中的DELETE),但它错过了IF这个词is not in 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);
    }

2 个答案:

答案 0 :(得分:1)

我认为您只想删除没有相应子行的父行,在这种情况下,您可以执行以下操作:

delete from table1
where not exists (
  select null from table2 where table2.word = table1.word
)

答案 1 :(得分:1)

您可以使用LEFT JOIN:

DELETE FROM 
    table1
LEFT JOIN 
    table2
ON 
    table1.word = table2.word
WHERE
   table2.word IS NULL