行の 10% を削除したいとしましょう。これを行うためのクエリはありますか?
何かのようなもの:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
行の約10%のみが必要な場合、特定の順序ではなく、これでうまくいくはずです。
DELETE FROM tbl WHERE RAND() <= 0.1
ただし、乱数を生成するオーバーヘッドがあるため、非常に大きなデータ セットで使用することはお勧めしません。
フィルタリングされた行の合計量を返し、php で計算し、その値を 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}");
DELETE で次のような高度なクエリが許可されるかどうかはわかりません。
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