2012-04-28 39 views

Trả lời

3

tôi chỉ đơn giản sẽ trở lại với tổng số lượng hàng được lọc, tính toán thông qua php và sử dụng giá trị đó như là một giới hạn trong truy vấn DELETE tôi.

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

Tôi không chắc chắn nếu DELETE cho phép một truy vấn cao cấp như thế này một:

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

tôi biết tôi có thể thực hiện việc này: D – dynamic

+0

Có lẽ thực sự đã bị chi phối, nhưng có lẽ trên truy vấn sẽ làm điều đó? :) –

+0

Tôi sẽ stich với cách php đáng yêu cũ – dynamic

4

Nếu bạn chỉ cần khoảng 10% hàng, không theo thứ tự đặc biệt, điều này sẽ làm mẹo:

DELETE FROM tbl WHERE RAND() <= 0.1 

Tuy nhiên, tôi không khuyên bạn nên sử dụng nó trên các tập dữ liệu rất lớn do phí tạo ra số ngẫu nhiên.

+0

Mặc dù, mặt khác, các hàng càng nhiều, tỷ lệ phần trăm gần hơn có thể là 10%. –

+0

Yup. Đối với các hàng nhỏ, nó không chính xác lắm. Tôi muốn tưởng tượng bất cứ điều gì ở trên khoảng 100 hàng nên được tốt mặc dù. – Polynomial

+0

KHÔNG, tôi có một số điều kiện và một số ORDER BY – dynamic

Các vấn đề liên quan