我有:
mysql_query("DELETE FROM mytable ORDER BY id DESC LIMIT 3, 999999999;")
or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
但似乎并不喜欢它.我想保留最近的三行并删除其他所有内容.思考?
跟进 - 感谢同时的jinx!
我尝试了代码,并得到此版本错误:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Run Code Online (Sandbox Code Playgroud)
我检查了我的主机,我有:MySQL版本5.5.36-cll-lve
我没想到这一点.限制需要什么版本?有没有其他方法可以写出这个有效的方法?
你认为你的第一次尝试确实有效.但是,LIMITMySql DELETE命令中的关键字仅支持最大行数,而不支持要删除的值范围.这就是您看到错误的原因.接下来,你会认为(正如我所想)这样的东西会起作用:
DELETE FROM mytable WHERE id NOT IN
(SELECT id FROM mytable ORDER BY id DESC LIMIT 3);
Run Code Online (Sandbox Code Playgroud)
但是,MySql似乎也不支持语句IN或NOT IN运算符DELETE.接下来,您会认为这样的事情会起作用:
DELETE FROM mytable WHERE id <
(SELECT id FROM mytable ORDER BY id DESC LIMIT 2,1)
Run Code Online (Sandbox Code Playgroud)
但是,似乎MySql也不支持这个想法.还有一些帖子说你需要建立一个临时表,这看起来非常愚蠢!然而,与一群嵌套的选择和别名两轮牛车的,我是能够得到这样的工作:
DELETE FROM mytable WHERE id <
(select id FROM (SELECT * FROM myTable) as t ORDER BY id DESC LIMIT 2,1);
Run Code Online (Sandbox Code Playgroud)
令人难以置信的MySql让这很难!也许是时候建立一个更好的数据库了,比如PostgreSQL?它会像你期望的那样工作.
DELETE FROM mytable WHERE id < (
SELECT id FROM mytable ORDER BY id DESC LIMIT 2,1
)
Run Code Online (Sandbox Code Playgroud)
如果您的MySQL版本在delete语句中抱怨子查询,请尝试
DELETE FROM mytable WHERE id < (
SELECT id FROM (
SELECT id FROM mytable ORDER BY id DESC LIMIT 2,1
)
)
Run Code Online (Sandbox Code Playgroud)
过滤前3个ID并删除其余ID,您可以使用此查询执行此操作:
DELETE FROM mytable WHERE id NOT IN (
SELECT id FROM mytable ORDER BY id DESC LIMIT 3
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |