Giả sử tôi muốn xóa 10% hàng, có truy vấn để thực hiện việc này không?DELETE với phần trăm trên tổng số
Cái gì như:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
Giả sử tôi muốn xóa 10% hàng, có truy vấn để thực hiện việc này không?DELETE với phần trăm trên tổng số
Cái gì như:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
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
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.
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%. –
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
KHÔNG, tôi có một số điều kiện và một số ORDER BY – dynamic
tôi biết tôi có thể thực hiện việc này: D – dynamic
Có lẽ thực sự đã bị chi phối, nhưng có lẽ trên truy vấn sẽ làm điều đó? :) –
Tôi sẽ stich với cách php đáng yêu cũ – dynamic