2012-04-28 24 views
6

Diyelim ki satırların% 10'unu silmek istiyorum, bunun için bir sorgu var mı? gibiToplam sayıyla bir yüzde DELETE

şey:

DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1 

cevap

3

Sadece, filtrelenmiş satır toplam miktarı iade php aracılığıyla hesaplamak ve benim SİL sorguda bir sınır olarak bu değeri kullanırsınız. Yalnızca özel bir sırada, satır kabaca% 10 gerekiyorsa

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

Bunu yapabileceğimi biliyorum: D – dynamic

+0

Muhtemelen gerçekten çok uzağındadır, ama belki de yukarıdaki sorgu bunu yapabilir mi? :) –

+0

Eski güzel php yolu ile stich olacak – dynamic

4

Bunu yapmak gerekir: DELETE böyle bu bir şekilde gelişmiş bir sorgu izin veriyorsa

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

emin değilim hüner:

DELETE FROM tbl WHERE RAND() <= 0.1 

Ancak, ben nedeniyle rasgele sayılar üreten yükü çok büyük veri setlerini bunu kullanmanızı önermiyoruz.

+0

Diğer taraftan, daha fazla satır, yüzde 10'a yakın yüzde olabilir. –

+0

Yup. Küçük satırlar için çok doğru değil. Kabaca 100 satırın üstünde bir şey hayal etsem iyi olur. – Polynomial

+0

Hayır bazı koşulların ve bazı ORDER BY – dynamic