2012-04-28 10 views

Antwort

3

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 
+0

ich weiß, dass ich das tun kann: D – dynamic

+0

Wahrscheinlich wirklich farfeced, aber vielleicht über Abfrage würde das tun? :) –

+0

ich werde stich mit alten schönen php weg – dynamic

4

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.

+0

Obwohl auf der anderen Seite, je mehr Zeilen, desto näher an 10% der Prozentsatz sein könnte. –

+0

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

+0

NEIN Ich habe einige Bedingungen und einige ORDER BY – dynamic

Verwandte Themen