我正在设置一个多服务器安装,其中一些用户数据在服务器之间同步,具体取决于用户的优先级(从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个)条目,并处理同步其他服务器上的数据库的过程。
我想做的是
第一位没问题
SELECT * FROM `spiegel` ORDER BY priority LIMIT 100;
这是我对SQL的了解让我失望的地方。我不清楚如何有效地删除“拾取”条目。我能做的最好的事情是创建一个删除条目的ID的CSV列表,然后使用
DELETE FROM `spiegel` WHERE id in idcsvlist
然而,我怀疑这是一种漫长的做事方式。对于任何能够提出更好方法的人,我都非常感激。
答案 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 位。