如何删除元素而不知道它的id,只需在DB中订购

时间:2017-02-01 15:55:04

标签: mysql sql node.js sequelize.js

我有数据库表请求:

+----+---------+-----------------+--------+
| id | user_id | bicycle_type_id | height |
+----+---------+-----------------+--------+

一个用户可以在此表中包含多个记录。当然,那些记录会有不同的身份。

当我显示(在前端)项目列表时,它独立于数据库中的id列,因此列表始终从1开始,然后是2 ......依此类推。因此,作为函数参数,我得到ID的数组(在前端列表中的id,而不是数据库中的id。与序列中的数字一样)我需要删除的记录。

重要 - 我无法更改前端

当我只知道ASC顺序的{id(序列号)中的id时,我如何预先形成查询以删除元素?这些与表中的实际ID无关?

2 个答案:

答案 0 :(得分:0)

例如,如果要删除表格中的第12行:

DELETE FROM requests ORDER BY id ASC LIMIT 1 OFFSET 11

要删除第5行:

DELETE FROM requests ORDER BY id ASC LIMIT 1 OFFSET 4

删除第34行:

DELETE FROM requests ORDER BY id ASC LIMIT 1 OFFSET 33

我建议你先制作一份表副本并在副本上进行测试。

OR

尝试以下操作,看看是否找到了要删除的正确行。

SELECT FROM requests ORDER BY id ASC LIMIT 1 OFFSET 4

答案 1 :(得分:0)

我认为MySQL不支持OFFSET的{​​{1}}子句中的LIMIT

您可以这样做:

DELETE

我会建议另外几件事:

  • 锁定整个表格。同时运行的两个删除操作可能会相互干扰。
  • 确保delete requests r join (select r2.* from requests r2 order by id offset 11 limit 1 ) rr on r.id = rr.id; 自动递增,因此新值始终大于以前的值(因此,id不会干扰insert s。