我想我的问题有些模糊,但我会进一步解释。
会发生什么:让我们说一个名为John
的用户发了2条评论,同时已经在数据库中以他的名字命名3条评论。 $sql2
应该做的是选择John
发出的所有评论,按照comment_id
排序,并删除John
之前的所有评论,但{{1}除了最后3条评论}}
我有这段代码:
John
会发生什么:它删除行中的所有,只留下前三行,无论其名称如何
我尝试了其他代码:
$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);
会发生什么: 仅接受1个用户,如果我尝试将$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);
作为名称,则会删除除Scot
之外的所有内容表,它甚至不限于3
答案 0 :(得分:0)
您的查询基本上是说它应该删除与子查询不匹配的所有行。由于您的子查询正在提取您要保留的3行,因此where子句将删除与通过子查询返回的3不匹配的所有内容。
更有效的查询是进行删除,其中id在您希望删除的行列表中。