0

これを簡単にしましょう: 多くの行を持つ chat というテーブルがあり、すべてのユーザーが新しいメッセージを追加できます。これは、テーブルが非常に大きくなる可能性があることを意味します。

(私はオンラインで調べましたが、いくつかの例ではあまり「明確」ではありません。)

古いメッセージをすべて削除し、最新のメッセージを 25 だけ残す必要があります。私のIDは自動インクリメントに設定されているので、IDを介してそれを行いたいと思います。

これは私が持っているものですが、動作しません:

DELETE FROM `chat` ORDER BY `id` DESC LIMIT 0,50

見つけて変更しましたが、運が悪いです!

何を試したらいいのかわからない。私はあまり経験がありませんが、基本は知っています。

4

2 に答える 2

1

50 個のレコードを保持するには:

DELETE FROM `chat`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `chat`
    ORDER BY id DESC
    LIMIT 50
  ) foo
);
于 2015-03-19T12:14:40.740 に答える
0

コメントであなたのphpコードを見て、これを探しているならうまくいく私の答えを編集しています... 25の最新行を保持するすべての古い行を削除するには、最初にチャットテーブルからすべてのレコードを選択してから、同じものを数えます、制限を見積もります。つまり、カウントから 25 を差し引いてから、チャット テーブルで削除を実行しますが、DESC の順序で実行し、カウントから 25 を差し引いて推定された制限を指定します。

   $sqli = "SELECT * FROM chat";
  $result = $conn->query($sqli); 
  $count = count($result);
  $limit = $count - 25;
  //echo $limit;
   $sql = "DELETE FROM chat ORDER BY id DESC LIMIT $limit";
   if ($conn->query($sql) === TRUE)
   { 
   echo "true"; 
   } 
   else
    {
        echo "false";

   }
于 2015-03-19T12:19:12.407 に答える