行の10%を削除したいとします。これを行うクエリがありますか?私は単に、フィルタ行の合計金額を返すPHPによって計算し、私のDELETEクエリでの限界とその値を使用します総計のパーセンテージでDELETE
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
行の10%を削除したいとします。これを行うクエリがありますか?私は単に、フィルタ行の合計金額を返すPHPによって計算し、私のDELETEクエリでの限界とその値を使用します総計のパーセンテージでDELETE
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
:よう
何か。あなただけ順不同で、行のおよそ 10%が必要な場合は
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
、これが何をすべき: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}");
は私はわかりませんトリック:
しかし、乱数を生成するオーバーヘッドのために非常に大きなデータセットで使用することはお勧めしません。
しかし、一方、より多くの行は、10%近くになる可能性があります。 –
小さな行セットの場合、それほど正確ではありません。私は約100行以上のものはうまくいくはずだと思います。 – Polynomial
いいえ私はいくつかの条件といくつかを持っています。ORDER BY – dynamic
私はこれを行うことができることを知っています:D – dynamic
おそらく本当にfarfetced、おそらくクエリを上回るでしょうか? :) –
私は古い素敵なPHPの方法でstichします – dynamic