CREATE TABLE `arts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`title` varchar(255) COLLATE utf8mb4_croatian_ci NOT NULL,
`story` text COLLATE utf8mb4_croatian_ci NOT NULL,
`status` varchar(255) COLLATE utf8mb4_croatian_ci NOT NULL,
`tags` varchar(255) COLLATE utf8mb4_croatian_ci NOT NULL,
`ind` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_croatian_ci
例如-mysql数据库中给出的标题列表。
我不想按date
或name
对其进行排序,但需要自定义排序。
显然,我有一列名为ind
(意味着-索引)为整数类型,并且在客户端上上下移动标题后,我执行以下操作:
js
let ids = $.map($('.title'), (e) => $(e).data('id')).join(',');
let indexes = $.map($('.title'), (e) => $(e).index()).join(',');
$.post('index-pro.php', {fn: 'btn_save', args: [ids, indexes]}, function(data){
console.log(data);
});
index-pro.php
function btn_save($ids, $indexes){
global $db;
$ids = explode(',', $ids);
$indexes = explode(',', $indexes);
$sql = "update arts set ind = :aind where id = :aid";
$st = $db->prepare($sql);
foreach($ids as $key=>$val){
$st->execute([
":aid" => $val,
":aind" => $indexes[$key]
]);
}
}
因此,我下一个自定义订单的电话将是:
select id, title from arts order by ind asc
这一切都有效,但是有一个严重的问题-表演。拥有一千个标题,这项工作将在服务器端花费约14秒的时间。
还有其他本地方法吗?
也许创建具有自定义顺序标题的文件并以某种方式使用它,或者...我不知道。
有帮助吗?