我想我的问题有点模糊,但我会进一步解释。
应该发生什么:假设一个名为John
的用户发表了2条评论,而数据库中已经有3条以他的名字命名的评论。$sql2
应该做的是选择John
的所有评论,按其comment_id
排序,并按John
删除除John
最后3条评论之外的所有评论。
我有这个代码:
$sql1 = "INSERT INTO comments(comment,name) VALUES ('$comment','$name')";
mysqli_query($con,$sql1);
$sql2 = "DELETE FROM comments WHERE comment_id NOT IN (SELECT * FROM (SELECT comment_id FROM comments ORDER BY comment_id desc LIMIT 3) s)";
mysqli_query($con,$sql2);
发生的情况:它删除ALL的行,只保留前三行,而不考虑它们的名称
我尝试了另一个代码:
$sql1 = "INSERT INTO comments(comment,name) VALUES ('$comment','$name')";
mysqli_query($con,$sql1);
$sql2 = "DELETE FROM comments WHERE name NOT IN (SELECT * FROM (SELECT name FROM comments ORDER BY comment_id desc LIMIT 3) s)";
mysqli_query($con,$sql2);
会发生什么:它只接受1个用户,如果我尝试将Scot
作为名称,它会删除表中除Scot
之外的所有内容,甚至不会限制为3个
您的查询基本上是说它应该删除所有与子查询不匹配的行。由于您的子查询正在拉入您想要保留的3行,where子句将删除所有与通过子查询返回的3行不匹配的内容。
一个更有效的查询是删除id在您希望删除的行列表中的位置。