2012-04-28 2 views

ответ

3

я бы просто вернуть общее количество отфильтрованных строк, вычислить с помощью PHP и использовать это значение в качестве предела в моем запросе 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}"); 

Я не уверен, если DELETE позволяет продвинутую такие запросы, как это одна:

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

Я знаю, что смогу это сделать: D – dynamic

+0

Наверное, действительно надуманный, но, возможно, над запросом это сделает? :) –

+0

Я буду stich со старым прекрасным способом php – dynamic

4

Если вам нужно только примерно 10% строк, в произвольном порядке, то это должно сделать трюк:

DELETE FROM tbl WHERE RAND() <= 0.1 

Однако я не рекомендую использовать его на очень большие наборы данных из-за накладные расходы, генерации случайных чисел.

+0

Хотя, с другой стороны, чем больше строк, тем ближе будет 10%. –

+0

Yup. Для маленьких рядов это не очень точно. Я бы предположил, что все, что стоит примерно на 100 рядов, должно быть хорошо. – Polynomial

+0

НЕТ У меня есть некоторые условия и некоторые ORDER BY – dynamic

Смежные вопросы