自定义订单标题花费的时间太长

时间:2019-06-11 03:10:24

标签: javascript php mysql

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数据库中给出的标题列表。
我不想按datename对其进行排序,但需要自定义排序。
显然,我有一列名为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秒的时间。

还有其他本地方法吗?
也许创建具有自定义顺序标题的文件并以某种方式使用它,或者...我不知道。

有帮助吗?

0 个答案:

没有答案