MySQL SELECT然后DELETE

时间:2014-04-26 05:54:39

标签: mysql

我正在设置一个多服务器安装,其中一些用户数据在服务器之间同步,具体取决于用户的优先级(从0到...的数字)。同步旨在作为延迟后台作业完成,具有更高优先级的用户可以更快地同步数据。

为此,我有一个DBTable

CREATE TABLE IF NOT EXISTS `spiegel` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`priority` tinyint(1) NOT NULL,
`cql` varchar(4096) NOT NULL,
PRIMARY KEY (`id`),
KEY `priority` (`priority`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1

其中所有非零优先级用户都注明了其INSERT / DELETE / UPDATE事务。定期(每10分钟)一个cron作业运行一个PHP脚本,该脚本需要一些(我希望将其限制为N个条目,比如100个)条目,并处理同步其他服务器上的数据库的过程。

我想做的是

  1. 按优先级排序最多N个条目
  2. 从表中删除这些条目
  3. 第一位没问题

    SELECT * FROM `spiegel` ORDER BY priority LIMIT 100;
    

    这是我对SQL的了解让我失望的地方。我不清楚如何有效地删除“拾取”条目。我能做的最好的事情是创建一个删除条目的ID的CSV列表,然后使用

    DELETE FROM `spiegel` WHERE id in idcsvlist
    

    然而,我怀疑这是一种漫长的做事方式。对于任何能够提出更好方法的人,我都非常感激。

3 个答案:

答案 0 :(得分:2)

mySQL subquery limit prblm Juz Refer the link

尝试thiz:

SELECT * FROM `spiegel` ORDER BY priority LIMIT 100;
  

然后

DELETE FROM spiegel WHERE id IN (select * from(SELECT id FROM `spiegel` ORDER BY priority LIMIT 100)as temp);

答案 1 :(得分:0)

这是执行此操作的典型方式(取自https://stackoverflow.com/a/4041332/3565972

DELETE FROM `spiegel` WHERE id IN (SELECT id FROM `spiegel` ORDER BY priority LIMIT 100);

答案 2 :(得分:0)

任何遇到此线程的人的注释。为了实现我需要的结果

ORDER BY priority DESC

这里的答案中缺少 DESC 位。