2015-03-19 92 views
0

让我们来简单说一下: 我有一个名为chat的表,其中有许多行,每个用户都可以添加一条新消息,这意味着表可以得到相当大。PHP&MySQL:删除所有保留最新行的25行的所有旧行

(我在网上看了看,它不是很“清楚”的一些例子。)

我需要删除所有旧的邮件,只保留说,最新的人的25。现在我希望通过id来完成,因为我的id被设置为自动递增。

这是我有什么,但它不工作:

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

我发现它,并改变了它,但没有运气!

我只是不确定要尝试什么。我不是很有经验,我知道基本知识,任何帮助都非常感激。

+0

那不工作。 id不是先前的id + 1.它可能是:1 ... 2 ... 5 ... 6 ...删除某些行时发生。 – 2015-03-19 12:23:44

回答

-1

我看到你的PHP代码中的注释和编辑我answer.This是,如果你正在寻找这方面的工作...

$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"; 

    } 
+0

检查此...这是关于您的php代码 – 2015-03-19 12:44:59

+0

答案被接受但已被downvoted ...为什么? – 2018-01-27 07:40:49

0

保留50条记录:

DELETE FROM `chat` 
WHERE id NOT IN (
    SELECT id 
    FROM (
    SELECT id 
    FROM `chat` 
    ORDER BY id DESC 
    LIMIT 50 
) foo 
); 
+0

$ sql =“SELECT * FROM'chat'”; \t $ result = $ conn-> query($ sql); $ count = $ result-> num_rows; $ count = $ count - 25; \t $ sql =“DELETE FROM'chat' ORDER BY'id' DESC LIMIT $ count”; \t if($ conn-> query($ sql)=== TRUE){ echo“true”; } else { echo“false”; } – DannySMc 2015-03-19 12:17:01

+0

我用了别的东西,但我会试试这个谢谢! – DannySMc 2015-03-19 12:17:29

+0

你用php和2分贝查询做到了,这可能会慢一点,但可能! – 2015-03-19 12:21:32

0

随着自动递增的ID,这应该工作:

DELETE FROM chat ORDER BY id DESC LIMIT 50 

看看here