2017-04-09 1 views
0

das Problem, dass es ist eine riesige Menge der Abfrage wiewie groß mysql Zeilen gelöscht werden je nach nicht gleich

DELETE FROM `members` WHERE `membership` = 'C' AND (`id` != '1' AND `id` !='2' AND ...... thousands of ids); 

sein würde, wie ich das tun kann?

Ich habe auch WHERE id NICHT IN ("1", "2"); aber auch nicht funktioniert

kann ich Schleife oder so ähnlich

die IDs, die ich will halten und nicht löschen, aus einer anderen Tabelle geliefert wird, enthält ein Feld enthält die Benutzer-ID, die ich will nicht löschen verwendete ich PHP-Skript, mir zu helfen die SQL-Abfrage

wie

<?php 
require_once("inc.php"); 
$realty_uids = $db->query("SELECT `uid` from `realty2` ORDER BY `uid`"); 

$r = $db->fetch_assoc($realty_uids); 



while($r = $db->fetch_assoc($realty_uids)){ 
    $array[] = $r['uid']; 
} 
$input = array_unique($array); 

echo "DELETE from `members` WHERE `membership` = 'C' "; 
foreach($input as $key => $value){ 

    echo " AND `id` != '".$value."' <br>"; 

} 
echo ";"; 
+2

Definieren Sie "nicht funktioniert." Warum auch Strings für Ganzzahlen verwenden oder warum IN für einen einzelnen Wert verwenden? –

+0

Woher kommen die IDs? Sie können eine Unterabfrage verwenden, um die IDs zur Löschklausel zu leiten. Oder benutze einen JOIN mit delete. Wenn die Liste der IDs von woanders kommt, können Sie einen Texteditor verwenden, um einige Zeichenfolgen zu manipulieren, um die Anweisung 'IN (...)' zu erzeugen. – Origin

+0

Können Sie mehr Kontext bereitstellen? Du weißt natürlich, welche ID du nicht löschen willst, wie hast du das festgestellt? Kannst du die Abfrage stattdessen nicht darauf basieren? – andrew

Antwort

0
DELETE FROM `members` WHERE `membership` = 'C' AND NOT EXISTS (SELECT at.uid FROM `realty2` at WHERE at.uid = `members`.id); 

auf diese Weise funktionierte gut dank für jede versuchte zu erzeugen :)

Verwandte Themen