Sagen wir, ich möchte 10% der Zeilen löschen, gibt es eine Abfrage, dies zu tun?LÖSCHEN mit einem Prozentsatz auf Gesamtzählung
Etwas wie:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
Sagen wir, ich möchte 10% der Zeilen löschen, gibt es eine Abfrage, dies zu tun?LÖSCHEN mit einem Prozentsatz auf Gesamtzählung
Etwas wie:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
Ich würde einfach die Gesamtmenge der gefilterten Zeilen zurück, durch php berechnen und diesen Wert als Grenzwert in meiner DELETE-Abfrage verwenden.
$query = mysql_query("SELECT COUNT(*) FROM tbl WHERE conditions");
$int = reset(mysql_fetch_array($query));
$int = round($int * 0.1);
mysql_query("DELETE FROM tbl WHERE conditions LIMIT {$int}");
Ich bin mir nicht sicher, ob DELETE eine erweiterte Abfrage wie diesen erlaubt:
DELETE FROM ( SELECT h2.id
FROM ( SELECT COUNT(*) AS total
FROM tbl
WHERE conditions) AS h
JOIN ( SELECT *, @rownum := @rownum + 1 AS rownum
FROM tbl, (SELECT @rownum := 0) AS vars
WHERE conditions) AS h2
ON '1'
WHERE rownum < total * 0.1) AS h3
Wenn Sie nur grob 10% der Zeilen, in keiner bestimmten Reihenfolge, sollte dies tun der Trick:
Allerdings empfehle ich nicht, es auf sehr großen Datensätzen wegen des Aufwands der Erzeugung von Zufallszahlen zu verwenden.
Obwohl auf der anderen Seite, je mehr Zeilen, desto näher an 10% der Prozentsatz sein könnte. –
Yup. Für kleine Rowsets ist es nicht sehr genau. Ich könnte mir vorstellen, dass etwas über etwa 100 Zeilen in Ordnung sein sollte. – Polynomial
NEIN Ich habe einige Bedingungen und einige ORDER BY – dynamic
ich weiß, dass ich das tun kann: D – dynamic
Wahrscheinlich wirklich farfeced, aber vielleicht über Abfrage würde das tun? :) –
ich werde stich mit alten schönen php weg – dynamic