2012-04-28 17 views

risposta

3

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 
+0

so che posso fare questo: D – dynamic

+0

Probabilmente davvero in parentesi, ma forse sopra la query lo farebbe? :) –

+0

I will stich con il vecchio modo bello php – dynamic

4

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.

+0

Anche se, d'altra parte, più file, il più vicino al 10% della percentuale potrebbe essere. –

+0

Sì. Per i piccoli set di righe, non è molto preciso. Immagino che qualsiasi cosa al di sopra di 100 file dovrebbe andare bene. – Polynomial

+0

NO ho alcune condizioni e alcune ORDINE DA – dynamic

Problemi correlati