Diciamo che voglio eliminare il 10% delle righe, esiste una query per fare ciò?CANCELLA con una percentuale sul conteggio totale
Qualcosa di simile:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
Diciamo che voglio eliminare il 10% delle righe, esiste una query per fare ciò?CANCELLA con una percentuale sul conteggio totale
Qualcosa di simile:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
vorrei semplicemente restituire l'importo totale delle righe filtrate, calcolare attraverso php e utilizzare tale valore come un limite nella mia query 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}");
io non sono sicuro se DELETE permette una query avanzata come questo:
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
Se avete solo bisogno circa il 10% di righe, in nessun ordine particolare, questo dovrebbe fare il trucco:
DELETE FROM tbl WHERE RAND() <= 0.1
Tuttavia, non mi consiglia di utilizzare su grandi insiemi di dati a causa del sovraccarico di generazione di numeri casuali.
Anche se, d'altra parte, più file, il più vicino al 10% della percentuale potrebbe essere. –
Sì. Per i piccoli set di righe, non è molto preciso. Immagino che qualsiasi cosa al di sopra di 100 file dovrebbe andare bene. – Polynomial
NO ho alcune condizioni e alcune ORDINE DA – dynamic
so che posso fare questo: D – dynamic
Probabilmente davvero in parentesi, ma forse sopra la query lo farebbe? :) –
I will stich con il vecchio modo bello php – dynamic