php - mySQL 数据库更新时的动态计算

标签 php mysql

我有一个项目表,每个项目都通过一个名为 category 的行中的整数单独与一个类别相关联。我还有每个项目的显示顺序,与其相关类别相关。这保存在名为 pictureorder 的行中。直截了当?

当用户删除包含与之关联的项目/图片的类别时,我的问题就出现了。我告诉 mySQL 搜索与该类别关联的任何项目,并将它们与由 0 表示的“默认”类别相关联。

// IF THERE'S ANY PICTURES THAT WERE IN THAT CATEGORY,
// MOVE THEM INTO THE DEFAULT CATEGORY.
$uncategorise = "UPDATE pictures 
    SET category = '0'
    WHERE category = '$categoryID'
    AND username = '$userID'";
$queryUncat = mysql_query($uncategorise) or die(mysql_error());

这行得通。但是,项目的图片顺序被破坏,因为从已删除类别转移的项目可能会在默认类别中创建重复的图片顺序。我知道如何以多次调用数据库的方式解决这个问题。这感觉太贵了。我的问题是我是否可以使用一些我不知道的技术来更新一个递增的 pictureorder 整数到数据库,因为它被调用而不将该行作为键?类似的东西:

$uncategorise = "UPDATE pictures 
    SET category = '0',
        pictureorder = 'TotalofDefaultCategory++'
    WHERE category = '$categoryID'
    AND username = '$useID'";
$queryUncat = mysql_query($uncategorise) or die(mysql_error());

提前致谢!

更新1

根据下面 Kyle 的建议,我正在尝试以下操作但没有成功:

UPDATE pictures 
    SET category = '0',
        pictureorder = (SELECT COUNT(category) + 1 WHERE category='0' AND username='$useID')
    WHERE category = '$categoryID'
    AND username = '$useID';

如果我省略 pictureorder = (SELECT COUNT(category) + 1 WHERE category='0' AND username='$useID'),只要类别匹配 $categoryID$useID。但是,如果我包括附加行,则没有任何变化。我没有收到任何错误,但图片顺序没有改变。类别也没有。语法是否正确?

此外,如果我将 pictureorder = (SELECT... 替换为 pictureorder = 2 它会按预期工作。所以除了语法不正确(我希望它不会像我担心的那样以这种方式包含 COUNT 好得令人难以置信)。

最佳答案

您可以使用服务器端变量:

第一个查询:

select @cnt := 1;

第二个查询:

update pictures SET pictureorder := @cnt, @cnt := @cnt + 1
WHERE ...
order by pictureorder, ...

您需要一个适当的 order by 子句来确保具有重复 pictureorder 值的记录以正确的顺序放置 - 移动的记录是在已经存在的记录之前还是之后类别?

关于php - mySQL 数据库更新时的动态计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012990/

相关文章:

PHP 搜索表单

mysql - 仅选择具有不同值组合的条目?

mysql - impala 中的列值除以总行数

php - 从mysql数据库获取1列值

mysql - 问题设置事件以清除mysql中的列

php - Twig+ Wordpress - 如何将数组参数传递给函数?

php - 在 MYSQL 中添加两行的值并将它们组合成一行

php - 连接mysql时出现110连接超时错误

php - Zend soap 自动发现和生成的 WSDL 中的 nillable ="true"

php - MySQL 从一个表中选择并检查另一个表是否存在相同的值