gpt4 book ai didi

php - SET a1 WHERE a AND b1 WHERE b AND c1 WHERE c, 等等

转载 作者:行者123 更新时间:2023-11-29 00:28:38 25 4
gpt4 key购买 nike

我有一个包含图像数据的 MySQL 表。我的后端应用程序使用实时排序模块(拖放图像)。

我想要的是在 单个查询 中更新所有排序的图像 after 排序过程完成,而不是每次将图像放到新位置时更新单个查询(我需要在排序时禁用所有连接)。

至于现在,我是使用 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();

}

上面的查询给我以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE'

最佳答案

我只写 SQL 部分,您可以从 PHP 构建它:

UPDATE images
SET sort = CASE name
WHEN 'x' THEN 1
WHEN 'y' THEN 2
...
ELSE sort
END
WHERE full_path='...';

此外,您可以使用 AND name in ('x', 'y') 过滤 WHERE 子句中的行。在这种情况下,您可以将 ELSE 部分保存在 CASE 中。

如果您想使用多个列来标识您的行,请使用:

UPDATE images
SET sort = CASE CONCAT(full_path, '/', name)
WHEN 'path/x' THEN 1
WHEN 'path/y' THEN 2
...
ELSE sort
END

关于php - SET a1 WHERE a AND b1 WHERE b AND c1 WHERE c, 等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17683433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com