我们正试图为下表创建一个查询:
CREATE TABLE `Action` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`vendor_Id` int(10) unsigned DEFAULT NULL,
`name` varchar(60) NOT NULL,
`assigned_To` varchar(40) DEFAULT NULL,
`updated_At` datetime(3) NOT NULL,
`completed_At` datetime(3) DEFAULT NULL,
`deleted_At` datetime(3) DEFAULT NULL,
`created_At` datetime(3) NOT NULL,
`deadline` datetime(3) NOT NULL,
`notes` varchar(400) DEFAULT NULL,
`completed` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `action_vendor_id_foreign` (`vendor_Id`),
CONSTRAINT `action_vendor_id_foreign` FOREIGN KEY (`vendor_Id`) REFERENCES `Vendor` (`vendor_Id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1我们想要显示的行动,使用分页的基础上,最后期限字段的上升顺序。但是截止日期可以具有相同的值,这给我们实现基于截止日期字段的游标分页带来了问题。
可以为将来的任何日期创建操作。我们考虑过使用created_At和deadline,但是它失败了,因为我们可以在11月22日和截止日期25创建Action,在11月23日使用最后期限24创建另一个操作。我的意思是,它们之间没有任何关系。id和deadine列也会发生类似的情况。
如何解决在ASC顺序中使用分页和截止日期显示操作的问题。
发布于 2017-11-22 13:15:23
ORDER BY deadline ASC, id ASC将是“确定性的”(假设id是表的PRIMARY KEY )。并包括INDEX(deadline, id)。
再论OFFSET:http://mysql.rjweb.org/doc.php/pagination的分页与罪恶
如果用户在列表中分页时有机会添加或删除行,则可以在分页列表中跳过或复制项。“记住你停止的地方”(参见链接)解决了这个问题。但是,当涉及两列时,要说>有点棘手。
https://dba.stackexchange.com/questions/191472
复制相似问题