2012-04-28 7 views

Respuesta

3

me devuelva el importe total de filas filtradas, calcular a través de php y utilizar este valor como límite en mi consulta DELETE.

$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}"); 

no estoy seguro de si Eliminar permite una consulta avanzada como este:

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

Sé que puedo hacer esto: D – dynamic

+0

Probablemente muy lejos, pero tal vez la consulta anterior podría hacer eso? :) –

+0

voy a stich con la vieja forma encantadora de php – dynamic

4

Si sólo necesita más o menos 10% de filas, sin ningún orden en particular, esto debería hacer el truco:

DELETE FROM tbl WHERE RAND() <= 0.1 

Sin embargo, no recomiendo usarlo en conjuntos de datos muy grandes debido a la sobrecarga de generar números aleatorios.

+0

Aunque, por otro lado, cuanto más filas, más cerca del 10% podría ser el porcentaje. –

+0

Sí. Para pequeños conjuntos de filas, no es muy preciso. Me imagino que cualquier cosa por encima de aproximadamente 100 filas debería estar bien sin embargo. – Polynomial

+0

NO tengo algunos condicionales y algunos ORDER BY – dynamic

Cuestiones relacionadas