0

データベースに最新の 10 件のエントリを保持し、古いエントリを削除しようとしています。を試しDELETE FROM people ORDER BY id DESC LIMIT $excessましたが、上位 10 エントリが削除されました。

$query = "SELECT * FROM people";
$result = mysqli_query($conn, $query);
$count = mysqli_num_rows($result);
if ($count > 10) {
    $excess = $count - 10;
    $query = "DELETE FROM people WHERE id IN(SELECT id FROM people ORDER BY id DESC LIMIT '$excess')";
    mysqli_query($conn, $query);
}
4

4 に答える 4

2

このようなもの?サブクエリで最新の 10 個の ID を取得してから、他のすべての ID を削除します。

DELETE FROM people WHERE id NOT IN (SELECT id FROM PEOPLE ORDER BY id DESC LIMIT 10)
于 2013-06-26T17:35:25.893 に答える
0

あなたのロジックはいたるところにあり、[you should ORDER BY ASC, not DESC]、[たとえば] 10,000 エントリがある場合、10,000 エントリINすべてを比較する 9,990 エントリの句があるため、クエリには時間がかかります。

最新の 10 件を選択し、含まれていない場所を削除します。

DELETE FROM people
  WHERE id NOT IN(
    SELECT id 
    FROM people
    ORDER BY id DESC
    LIMIT 10
  )
于 2013-06-26T17:40:12.327 に答える
-1

10 番目の要素の ID を見つけて、古い行をすべて削除しますか?

于 2013-06-26T17:33:50.320 に答える