Предположим, я хочу удалить 10% строк, есть ли запрос для этого?DELETE с процентом от общего количества
Что-то вроде:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
Предположим, я хочу удалить 10% строк, есть ли запрос для этого?DELETE с процентом от общего количества
Что-то вроде:
DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
я бы просто вернуть общее количество отфильтрованных строк, вычислить с помощью 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
Если вам нужно только примерно 10% строк, в произвольном порядке, то это должно сделать трюк:
DELETE FROM tbl WHERE RAND() <= 0.1
Однако я не рекомендую использовать его на очень большие наборы данных из-за накладные расходы, генерации случайных чисел.
Хотя, с другой стороны, чем больше строк, тем ближе будет 10%. –
Yup. Для маленьких рядов это не очень точно. Я бы предположил, что все, что стоит примерно на 100 рядов, должно быть хорошо. – Polynomial
НЕТ У меня есть некоторые условия и некоторые ORDER BY – dynamic
Я знаю, что смогу это сделать: D – dynamic
Наверное, действительно надуманный, но, возможно, над запросом это сделает? :) –
Я буду stich со старым прекрасным способом php – dynamic