我有一个带有图像数据的 MySQL 表。我的后端应用程序正在使用实时排序模块(拖放图像)。
我想要的是在排序过程完成后在单个查询中更新所有排序的图像,而不是每次将图像拖放到新位置时更新单个查询(我需要在排序时禁用任何连接)。
至于现在,我使用foreach
循环制作了这个。比较两个数组 - 一个保存文件的原始顺序,第二个保存新顺序。排序完成后,它只更新具有不同顺序的图像。但我不确定循环是否是触发多查询的好地方(有很多图像,这可能会使应用程序严重超载)
public function setSortFilesinSql($new_sort_arr)
{
$sql = new sql();
$sql->sqlConnect();
foreach ($new_sort_arr as $key=>$value){
if($this->_original_sort[$key] != $value){
$sql->query("UPDATE images SET sort='".$key."' WHERE name='".$value."' AND full_path='".$this->path."'");
}
}
$this->_original_sort = $new_sort_arr;
$sql->disconnect();
}
有没有办法“简化/加速”整个过程,或者将其设置为单个查询?
编辑
我已经像这样检查了 CASE 子句:
public function setSortFilesinSql($new_sort_arr)
{
$sql = new sql();
$sql->sqlConnect();
$sort_query = "UPDATE images SET sort = CASE CONCAT(full_path, '/', name)";
foreach ($new_sort_arr as $key=>$value){
if($this->_original_sort[$key] != $value){
$sort_query .= "WHEN '".$this->path."/".$value."' THEN '".$key."' ";
}
}
$sort_query .= "ELSE sort END CASE";
$sql->query($sort_query);
$this->_original_sort = $new_sort_arr;
$sql->disconnect();
}
上面的查询给了我以下错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“CASE”附近使用的正确语法