Digamos que quiero eliminar el 10% de las filas, ¿hay alguna consulta para hacer esto?ELIMINAR con un porcentaje sobre el recuento total
Algo así como:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
Digamos que quiero eliminar el 10% de las filas, ¿hay alguna consulta para hacer esto?ELIMINAR con un porcentaje sobre el recuento total
Algo así como:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
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
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.
Aunque, por otro lado, cuanto más filas, más cerca del 10% podría ser el porcentaje. –
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
NO tengo algunos condicionales y algunos ORDER BY – dynamic
Sé que puedo hacer esto: D – dynamic
Probablemente muy lejos, pero tal vez la consulta anterior podría hacer eso? :) –
voy a stich con la vieja forma encantadora de php – dynamic